PHP __callStatic&方法名称字符无效

时间:2011-07-19 05:10:29

标签: php static-methods magic-methods

关于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();

但我试图避免这种情况。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这已在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