2011-07-19 69 views
0

有關__callStatic()在PHP中的快速問題;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(); 

但我試圖避免這一點。

回答

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

1

我不認爲PHP解析器可以處理目前。我不能證明它現在,但我認爲這是一個類似的問題,如函數調用後的數組解引用問題(callme()['arraykey'])。

+0

謝謝@Stefan Gehrig--這就是我開始想的,不幸的是。我已經嘗試了大量不同的字符串解析技巧,但是這一切都回到了一個意想不到的括號'{'PHP不喜歡。這非常不幸,因爲現在我不得不求助於singleton來實現這個功能,而不需要通過'__call()'來實現這個功能。 – Dan

1

您可以通過call_user_func()調用靜態函數。

+0

謝謝@ Raffael1984 - 是的,這是一個選項,雖然比我希望的更髒,更不用說現在我有方法查找發生,一次'call_user_func()'和一次'__callStatic()' 。目前爲止只有可行的選擇。 – Dan