2010-08-11 104 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,但我不知道。