Use not allowed inside a function phpStorm

  • Автор темы Автор темы 3jIo
  • Дата начала Дата начала

3jIo

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

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

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

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

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

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

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

. Но никого это не волнует, потому что никто в здравом уме внутри функции эти структуры объявлять не будет, они по своей сути глобальны.
Мне кажется что таким способом можно реализовать что типо намеспайсов. То есть пока функция не вызвана класс/трейт/интерфейс не будет определен. Аля динамическое объявление классов. Наверно даже в if можно объявлять.
 
класс/трейт/интерфейс нельзя объявить внутри функции
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
 
Последнее редактирование:
Сверху