2010-08-11 6 views
2

La fonction magique __call() en php est utilisée dans les classes. Y a-t-il une fonction magique similaire mais pour les fonctions à la place? Comme __autoload() est pour les fonctions.Fonctions magiques __call() pour les fonctions?

Par exemple quelque chose comme ça

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

Répondre

3

Non, je ne pense pas que cette fonction magie existe.

Une solution de contournement pour ce serait de mettre vos fonctions dans une classe statique, et ajoutez une méthode magique __callStatic à cette classe (> PHP 5.3 uniquement, j'ai peur):

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!"); 

Pour PHP < 5.3, vous pourriez faire la même chose, mais vous devrez instancier un objet et utiliser la méthode magique __call.

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

No. Appel d'une fonction qui n'existe pas se traduira toujours une erreur fatale.

** Peut-être qu'une extension zend peut intercepter ceci avec un fcall_begin_handler, mais je ne suis pas sûr.