Магические функции __call () для функций? - PullRequest
2 голосов
/ 11 августа 2010

Магическая функция __call () в php используется в классах. Существуют ли подобные магические функции, кроме функций? Как и __autoload () для функций.

Например, что-то вроде этого

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

Ответы [ 2 ]

3 голосов
/ 11 августа 2010

Нет. Вызов несуществующей функции всегда приведет к ФАТАЛЬНОЙ ошибке.

** Может быть, расширение Zend может перехватить это с fcall_begin_handler, но я не уверен.

3 голосов
/ 11 августа 2010

Нет, я не думаю, что такая волшебная функция существует.

Одним из способов решения этой проблемы было бы поместить ваши функции в статический класс и добавить в этот класс магический метод __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 вы можете сделать то же самое, но вам нужно создать экземпляр объекта и использовать магический метод <code>__call.

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