PHP 8.4 中是否会支持在没有额外括号的情况下进行类实例化?
发布于 作者 Paul Redmond
用于省略 new
表达式周围括号的 RFC 很可能将在 PHP 8.4 中发布。该 RFC 目前处于投票阶段,有 21 票赞成,3 票反对。投票将于 5 月 24 日结束,因此 2/3 的投票仍然有可能失败,但乐观地讲,它似乎正在朝正确的方向发展。
自从引入实例化期间的成员访问后,您必须将 new MyClass()
调用括在括号中,否则会发生解析错误。建议的语法将允许您在没有额外括号的情况下访问常量、属性和方法
class Request implements Psr\Http\Message\RequestInterface{ // ...} // Valid$request = (new Request())->withMethod('GET')->withUri('/hello-world'); // PHP Parse error: syntax error, unexpected token "->"$request = new Request()->withMethod('GET')->withUri('/hello-world');
以下是一些您可能会使用此功能的常见示例(RFC 包含更多示例)
var_dump( new MyClass()::CONSTANT, // string(8) "constant" new MyClass()::$staticProperty, // string(14) "staticProperty" new MyClass()::staticMethod(), // string(12) "staticMethod" new MyClass()->property, // string(8) "property" new MyClass()->method(), // string(6) "method" new MyClass()(), // string(8) "__invoke");
您可以在 RFC 中阅读有关此建议更改的所有详细信息。此功能可能会在 PHP 8.4 中发布。该实现看起来已经完成编码(尚未批准和合并),您可以在 GitHub 上 找到它。