PHP __callStatic &方法名称字符无效

发布于 2024-11-24 17:48:27 字数 842 浏览 0 评论 0原文

关于 PHP 中的 __callStatic() 的快速问题;

class Test{
    public static function __callStatic($method, $arguments){
        echo $method . PHP_EOL;
    }
    public function __call($method, $arguments){
        echo $method . PHP_EOL;
    }
}

$test = new Test();

$test->foo();
$test->{'hello-world'}();

Test::bar();
Test::{'goodbye-universe'}();

预期输出:

foo
hello-world
bar
goodbye-universe

实际输出:

foo
hello-world
bar
PHP Parse error:  syntax error, unexpected '{', expecting T_STRING or T_VARIABLE or '$' in - on line 18

此语法是否不允许,也不能通过 __callStatic() 实现?

注意:试图摆脱临时变量。以下内容将起作用:

$goodbyeUniverse = 'goodbye-universe';
Test::$goodbyeUniverse();

但我试图避免这种情况。

Quick question regarding __callStatic() in PHP;

class Test{
    public static function __callStatic($method, $arguments){
        echo $method . PHP_EOL;
    }
    public function __call($method, $arguments){
        echo $method . PHP_EOL;
    }
}

$test = new Test();

$test->foo();
$test->{'hello-world'}();

Test::bar();
Test::{'goodbye-universe'}();

Expected output:

foo
hello-world
bar
goodbye-universe

Actual output:

foo
hello-world
bar
PHP Parse error:  syntax error, unexpected '{', expecting T_STRING or T_VARIABLE or '

Is this syntax not permissible, nor functionality achievable with __callStatic()?

Note: Trying to get away with no temporary variables. The following will work:

$goodbyeUniverse = 'goodbye-universe';
Test::$goodbyeUniverse();

But I'm trying to avoid that.

in - on line 18

Is this syntax not permissible, nor functionality achievable with __callStatic()?

Note: Trying to get away with no temporary variables. The following will work:

But I'm trying to avoid that.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

舂唻埖巳落 2024-12-01 17:48:27

我认为 PHP 解析器目前无法处理这个问题。我现在无法证明这一点,但我认为这是一个类似的问题,例如函数调用后的数组取消引用问题(callme()['arraykey'])。

I don't think the PHP parser can handle that currently. I cannot prove it just now, but I think it's a similar issue like the array-dereferencing-issue after function calls (callme()['arraykey']).

清眉祭 2024-12-01 17:48:27

您可以通过 call_user_func() 调用静态函数。

you could invoke a static function via call_user_func().

玩心态 2024-12-01 17:48:27

PHP 5.4 中已解决此问题

2011 年 8 月 4 日,PHP 5.4.0 Alpha 3
- 新增功能:
<代码> 。短数组语法,请参阅升级指南了解完整详细信息
   (gmail .com 上的 rsky0711,9elements .com 上的 sebastian.deutsch,Pierre)
<代码> 。二进制数字格式 (0b001010)。 (gmail dot com 的 Jonah dot Harris)
<代码> 。支持 Class::{expr}() 语法 (Pierrick)

This has been resolved in PHP 5.4

04 Aug 2011, PHP 5.4.0 Alpha 3
- Added features:
 . Short array syntax, see UPGRADING guide for full details
   (rsky0711 at gmail . com, sebastian.deutsch at 9elements . com, Pierre)
 . Binary numbers format (0b001010). (Jonah dot Harris at gmail dot com)
 . Support for Class::{expr}() syntax (Pierrick)

https://svn.php.net/repository/php/php-src/tags/php_5_4_0RC8/NEWS

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文