Netbeans IDE (12.2):PHP 8.0 构造函数提升的语法错误

Posted

技术标签:

【中文标题】Netbeans IDE (12.2):PHP 8.0 构造函数提升的语法错误【英文标题】:Netbeans IDE (12.2): Syntax error with PHP 8.0 constructor promotion 【发布时间】:2021-04-20 01:08:36 【问题描述】:

我正在搞乱php 中的新Attributes(又名“注释”),我遇到了这个烦人的问题,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】:

未来读者请注意:此答案写于 2021 年 1 月 15 日

最好的建议可能是“耐心等待”:PHP 8.0.0 已于 2020 年 11 月 26 日发布,而 NetBeans 12.2(2020 年 12 月 7 日发布)includes some PHP 8 support 仍然存在an open issue tracking further changes。

特别是,对 Constructor Property Promotion 的支持是 being worked on in this PR,目前标记为针对版本 12.3,should be complete in the second half of February 2021。

在此之前,您要么必须忍受 IDE,认为您的源代码无效,要么切换到其他 IDE(PhpStorm 包括在 version 2020.3, released 3rd December 2020 中的必要更改,如果您负担得起的话)。

顺便说一句,如果任何从事 NetBeans 的 PHP 功能工作的人看到这一点,您可能想要更新 this marketing page which is the top hit for "netbeans php" 并且目前吹嘘它对 PHP 5.6 的尖端支持!

【讨论】:

是的,你是对的。我可能只是稍等一下。我只是觉得奇怪,它们支持某些功能,而不是所有功能都在重大更新中。我不知道距离发布只有几个月的时间。我也在其中一些页面上,但我应该查看一下时间表。无论如何,如果我们在这种情况下可以忽略此类警告,那就太好了 - 其中一些您可以在“首选项 > 编辑器 > 提示”下静音。 @F.Muller 我不是专家,所以可能有办法,但在 8.0 之前,该语法完全没有意义,所以它可能没有引发特定错误,只是一般的“嗯?这看起来不像 PHP 你这个傻瓜!” 有没有办法阻止 Netbeans 使用 PHP8 验证代码?我在为 PHP7 构建的应用程序中有一个名为 Match 的类,但 Netbeans 12.3 将所有出现的 Match 显示为错误,因为它是 PHP8 中的关键字。我在项目属性中将我的 php 版本设置为 7.4,但它似乎没有做任何事情 @AhmedShefeer 这听起来像是一个新问题,应该发布到新页面。

以上是关于Netbeans IDE (12.2):PHP 8.0 构造函数提升的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Netbeans IDE 8.2 中更改评论颜色?

GlassFish 服务器无法在 NetBeans IDE 8.0 中启动

php 用于Netbeans的Laravel IDE Helper / PhpStorm / Sublime Text 2 CodeIntel,使用https://github.com/barryvd

NetBeans IDE出现中文成乱码?

NetBeans IDE 7.4下载安装

使用 Netbeans 12.2。使用 GUI 设计器我创建了一个按钮。显示我创建的按钮,但是当我运行应用程序时,按钮消失了