Use not allowed inside a function phpStorm

3jIo

Новичок
PHP:
function testTraits()
{
    trait TestTrait {
        abstract function tester();
    }

    trait TestTrait2 {
        function tester(){
            echo "Eeeeh, Baby!";
        }
    }

class D
{
    public function someFun(){}
    //Шторм выдает ошибку тут....
    use TestTrait1, TestTrait2;

}
}
 
Последнее редактирование:

3jIo

Новичок
Мне так кажется что шторм путает 'use" с другим "use", который у анонимных функциях.
 

hell0w0rd

Продвинутый новичок
Код нормально отформатируй.
function testTraits()
{
trait TestTrait {
abstract function tester();
ну и вот это что-то левое
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Проблема объявлять внутри функции класс и трейты?
 

3jIo

Новичок
Код нормально отформатируй.
function testTraits()
{
trait TestTrait {
abstract function tester();
ну и вот это что-то левое
Что тут левого? Говорю все пашет, ошибок нету. Просто phpStorm пишет типа ошибка и use нельзя использовать внутри функции,
но если вынести класс за функцию все норм. Также в настройках php указан версией php 5.5.

Проблема объявлять внутри функции класс и трейты?
Не понял.
 
Последнее редактирование:

3jIo

Новичок
Я так понял эта версия шторма не очень хорошо дружит с трейтами. Даже подстановка не пашет. У кого шторм более поздней версии пашет эта фича?
 

hell0w0rd

Продвинутый новичок
3jIo, класс/трейт/интерфейс нельзя объявить внутри функции
 

Вурдалак

Продвинутый новичок
Я смотрю ты прямо на ходу редактируешь свой первый пост, он эволюционирует на глазах, меняя одну опечатку другой.

Короче, синтаксически объявить класс или что-то другое — можно, работать будет. Если PhpStorm выделяет «use TestTrait1, TestTrait2» внутри трейта с этой ошибкой — это формально баг. Но никого это не волнует, потому что никто в здравом уме внутри функции эти структуры объявлять не будет, они по своей сути глобальны.
 

3jIo

Новичок
Я смотрю ты прямо на ходу редактируешь свой первый пост, он эволюционирует на глазах, меняя одну опечатку другой.

Короче, синтаксически объявить класс или что-то другое — можно, работать будет. Если PhpStorm выделяет «use TestTrait1, TestTrait2» внутри трейта с этой ошибкой — это формально баг. Но никого это не волнует, потому что никто в здравом уме внутри функции эти структуры объявлять не будет, они по своей сути глобальны.
Не редактирую, а просто скопировал код с IDE. но там уже дальше тестил с insteadof и as.
Насчет того что это баг, то я не вижу ни каких ошибок. Даже уровня NOTICE.
 

3jIo

Новичок
Я смотрю ты прямо на ходу редактируешь свой первый пост, он эволюционирует на глазах, меняя одну опечатку другой.

. Но никого это не волнует, потому что никто в здравом уме внутри функции эти структуры объявлять не будет, они по своей сути глобальны.
Мне кажется что таким способом можно реализовать что типо намеспайсов. То есть пока функция не вызвана класс/трейт/интерфейс не будет определен. Аля динамическое объявление классов. Наверно даже в if можно объявлять.
 

WMix

герр M:)ller
Партнер клуба
класс/трейт/интерфейс нельзя объявить внутри функции
3jIo, я тоже смысла не вижу, все глобально! покажи фишку которую позволяет твой изворот?
PHP:
function a(){
    class A{
        function b(){ echo 'hallo';}
    }
    $a = new A;
    $a->b();
}

function b(){
    class A{
        function b(){ echo 'hallo';}
    }
    $a = new A;
    $a->b();
}

a();
b();
Код:
$ php 1.php
hallo PHP Fatal error:  Cannot redeclare class A in .../1.php on line 11
 
Последнее редактирование:
Сверху