2010-08-11 221 views
2

php中的魔術函數__call()用於類中。有沒有類似的魔術功能,但功能,而不是?像__autoload()是用於函數。魔術函數__call()函數?

例如像這樣

function __call($name, $arguments) { 
    echo "Function $name says {$arguments[0]} "; 
} 
random_func("hello"); 

回答

3

不,我不認爲這樣一個神奇的功能存在。此

一個解決辦法是把你的功能集成到一個靜態類,並添加__callStatic魔術方法的那類(> PHP 5.3只,恐怕):

class Func 
{ 
    /** As of PHP 5.3.0 */ 
    public static function __callStatic($name, $arguments) 
    { 
    // Note: value of $name is case sensitive. 
    echo "Calling static method '$name' " 
     . implode(', ', $arguments). "\n"; 

    } 
} 

Func::random_func("hello!"); 

對於PHP < 5.3,你可以做同樣的事情,但你必須實例化一個對象並使用神奇的方法。

$Func = new Func; 
$Func->random_func("hello!"); 
3

號調用並不致命錯誤存在將總是結果的功能。

**也許一個zend擴展可以攔截這與fcall_begin_handler,但我不知道。