魔术函数__call()用于函数?

时间:2010-08-11 08:51:03

标签: php function magic-function

php中的魔术函数__call()用于类中。有没有类似的魔术功能,但功能呢?就像__autoload()用于函数。

例如像

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

2 个答案:

答案 0 :(得分: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,你可以做同样的事情,但你必须实例化一个对象并使用__call魔法。

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

答案 1 :(得分:3)

没有。调用不存在的函数始终会导致致命错误。

**也许zend扩展可以用fcall_begin_handler来拦截它,但我不确定。