php - 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());
我想这是一个错误。我可以使用旧语法,但这只是一种解决方法,以防我找不到解决方案。
问题:
我怎样才能摆脱这个错误消息,或者我的代码中是否缺少一些东西,应该在那里?
解决方案
给未来读者的注意事项:这个答案写于 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 的尖端支持!
推荐阅读
- react-native - 摆脱 React Native 中的底部 TextInput 栏
- angular - 可以在没有服务器(离线)的情况下运行 Angular 8 应用程序吗?
- node.js - 我们可以在所有同步或异步函数(NodeJS)中使用 try catch 吗?
- linux - 强制 sh shell 使用外部函数而不是内置函数
- continuous-integration - 使用 Lambda 函数的 AWS 代码管道
- c# - 简单的游戏如何让电脑先走?
- .net - Microsoft 对 .NET 中的 HEIF/HEIC 的支持?
- html - 如何对齐列表元素之间的空间
- html -
- c++ - 如果一个字符串在 C/C++ 中没有 NUL 字符会发生什么(以防编译器让它通过)?