首页 > 解决方案 > Netbeans IDE (12.2):PHP 8.0 构造函数提升的语法错误

问题描述

我在搞乱新的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());

想法句法 想法错误提示

我想这是一个错误。我可以使用旧语法,但这只是一种解决方法,以防我找不到解决方案。


问题:

我怎样才能摆脱这个错误消息,或者我的代码中是否缺少一些东西,应该在那里?

标签: phpnetbeanssyntax-errorsettingsphp-8

解决方案


给未来读者的注意事项:这个答案写于 2021 年 1 月 15 日

最好的建议可能是“耐心等待”:PHP 8.0.0 已于 2020 年 11 月 26 日发布,而 NetBeans 12.2(2020 年 12 月 7 日发布)包括一些 PHP 8 支持,但仍有一个未解决的问题正在跟踪进一步的变化

特别是,此 PR 正在支持 Constructor Property Promotion ,目前被标记为目标版本 12.3,该版本应在 2021 年 2 月下半月完成

在那之前,您要么必须忍受 IDE,认为您的源代码无效,要么切换到其他 IDE(PhpStorm 在2020 年 12 月 3 日发布的 2020.3 版本中包含必要的更改,如果您负担得起的话)。

顺便说一句,如果从事 NetBeans 的 PHP 功能工作的任何人看到这一点,您可能想要更新这个营销页面,该页面是“netbeans php”的热门话题,目前吹嘘其对 PHP 5.6 的尖端支持!


推荐阅读