Среда IDE Netbeans (12.2): синтаксическая ошибка при продвижении конструктора PHP 8.0

#php #netbeans #syntax-error #settings #php-8

#php #netbeans #синтаксическая ошибка #Настройки #php-8

Вопрос:

Я возился с новым Attributes (он же «Аннотации»), PHP и у меня возникла эта досадная проблема, которая Netbeans 12.2 не распознает мой действительный PHP 8.0 код. Я протестировал его на своем локальном компьютере, а также здесь: https://sandbox.onlinephpfunctions.com /.

Тем не менее, код, похоже, компилируется просто отлично. Другие PHP 8.0 функции тоже работают в IDE (… ну, это тот же двоичный файл). Могу ли я как-то исправить или, скорее, отключить эту ошибку? Потому что это помечает все мое рабочее пространство как ошибочное.

 <?php

#[Routing('hello')]
class A {
    public function __construct() {}
}

#[Routing('world')]
class B { 
    public function __construct() {}
}

class Route {
    public function __construct(public string $name) {}
}

#[Attribute(Attribute::TARGET_CLASS)]
class Routing {
    private static $routes = [];
    
    public function __construct(public string $name) {
        static::add(new Route($name));
    }
    
    private function add($route) {
        static::$routes[] = $route;
    }
    
    public static function getRoutes() {
        return static::$routes;
    }
}

$rA = new ReflectionClass(A::class);
$rB = new ReflectionClass(B::class);
$attributeA = $rA->getAttributes()[0];
$attributeB = $rB->getAttributes()[0];
$a = $attributeA->newInstance();
$b = $attributeB->newInstance();
print_r($a);
print_r($b);
print_r($a::getRoutes());
 

идея-синтаксис
идея-ошибка-подсказка

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


Вопрос:

Как я могу избавиться от этого сообщения об ошибке или есть что-то, чего мне не хватает в моем коде, что должно быть там?

Ответ №1:

Примечание для будущих читателей: этот ответ был написан 15 января 2021 года

Вероятно, лучший совет — «набраться терпения»: PHP 8.0.0 был выпущен 26 ноября 2020 года, и хотя NetBeans 12.2 (выпущенный 7 декабря 2020 года) включает некоторую поддержку PHP 8, все еще остается открытой проблема отслеживания дальнейших изменений.

В частности, в этом PR разрабатывается поддержка продвижения свойств конструктора, которая в настоящее время обозначена как целевая версия 12.3, которая должна быть завершена во второй половине февраля 2021 года.

До тех пор вам придется либо смириться с тем, что ваша среда IDE считает ваш исходный код недействительным, либо переключиться на другую среду IDE (PhpStorm включил необходимые изменения в версию 2020.3, выпущенную 3 декабря 2020 года, если вы можете себе это позволить).

Кстати, если кто-нибудь, работающий над функциональностью PHP в NetBeans, увидит это, вы можете захотеть обновить эту маркетинговую страницу, которая является хитом «netbeans php» и в настоящее время хвастается своей передовой поддержкой PHP 5.6!

Комментарии:

1. Да, вы правы. Я мог бы просто немного подождать. Мне просто показалось странным, что они поддерживают некоторые функции, а не все в крупном обновлении. Я не знал, что с момента выпуска прошло всего несколько месяцев. Я также был на некоторых из этих страниц, но мне следовало заглянуть в расписание. В любом случае, было бы здорово, если бы мы могли просто игнорировать такие предупреждения в этом случае, а некоторые из них вы можете отключить в разделе «настройки> редактор> подсказки».

2. @F.Muller Я не эксперт, поэтому может быть способ, но до версии 8.0 этот синтаксис был совершенно бессмысленным, поэтому, вероятно, он вызывает не конкретную ошибку, а просто общее «А? Это не похоже на PHP, ты дурак! »

3. Есть ли способ запретить Netbeans проверять код с помощью PHP8? У меня есть класс с именем Match в приложении, созданном для PHP7, но Netbeans 12.3 показывает все случаи совпадения как ошибку, поскольку это ключевое слово в PHP8. Я установил свою версию php как 7.4 в свойствах проекта, но, похоже, она ничего не делает

4. @AhmedShefeer Это звучит как новый вопрос, который следует опубликовать на новой странице.