0

__callStatic()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'}();

期待される出力:

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

しかし、私はそれを避けようとしています。

4

3 に答える 3

1

現在、PHPパーサーはそれを処理できないと思います。今は証明できませんが、関数呼び出し後の配列逆参照問題(callme()['arraykey'])のような同様の問題だと思います。

于 2011-07-19T07:21:25.480 に答える
1

call_user_func()を介して静的関数を呼び出すことができます。

于 2011-07-19T07:46:05.747 に答える
0

これはPHP5.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

于 2012-02-17T04:53:53.920 に答える