Maison > Article > développement back-end > Comment utiliser __call() en PHP
Cet article présente principalement l'utilisation de __call() en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Les objets PHP5 ont une nouvelle méthode spéciale __call(), qui est utilisée pour surveiller d'autres méthodes dans un objet. Si vous essayez d'appeler une méthode qui n'existe pas dans un objet ou qui est contrôlée par les autorisations, la méthode __call sera appelée automatiquement.
Exemple 1 : __call
<?php class foo { function __call($name,$arguments) { print("Did you call me? I'm $name!"); } } $x = new foo(); $x->doStuff(); $x->fancy_stuff(); ?>
Cette méthode spéciale peut être utilisée pour implémenter l'action "surcharge" en JAVA, afin que vous puissiez vérifier vos paramètres et les transmettre en appelant une méthode privée.
Exemple 2 : Utilisez __call pour implémenter l'action de "surcharge"
<?php class Magic { function __call($name,$arguments) { if($name=='foo') { if(is_int($arguments[0])) $this->foo_for_int($arguments[0]); if(is_string($arguments[0])) $this->foo_for_string($arguments[0]); } } private function foo_for_int($x) { print("oh an int!"); } private function foo_for_string($x) { print("oh a string!"); } } $x = new Magic(); $x->foo(3); $x->foo("3"); ?>
Cité de :
Les deux fonctions _call et ___callStatic sont la valeur par défaut de PHP class Function,
__call() Dans le contexte d'un objet, si la méthode appelée n'est pas accessible, elle sera déclenchée
__callStatic() Dans un contexte statique, si la méthode appelée est accès non accessible, il sera déclenché
instance :
<?php abstract class Obj { protected $property = array(); abstract protected function show(); public function __call($name,$value) { if(preg_match("/^set([a-z][a-z0-9]+)$/i",$name,$array)) { $this->property[$array[1]] = $value[0]; return; } elseif(preg_match("/^get([a-z][a-z0-9]+)$/i",$name,$array)) { return $this->property[$array[1]]; } else { exit("<br>;Bad function name '$name' "); } } } class User extends Obj { public function show() { print ("Username: ".$this->property['Username']."<br>;"); //print ("Username: ".$this->getUsername()."<br>;"); print ("Sex: ".$this->property['Sex']."<br>;"); print ("Age: ".$this->property['Age']."<br>;"); } } class Car extends Obj { public function show() { print ("Model: ".$this->property['Model']."<br>;"); print ("Sum: ".$this->property['Number'] * $this ->property['Price']."<br>;"); } } $user = new User; $user ->setUsername("Anny"); $user ->setSex("girl"); $user ->setAge(20); $user ->show(); print("<br>;<br>;"); $car = new Car; $car ->setModel("BW600"); $car ->setNumber(5); $car ->setPrice(40000); $car ->show(); ?>
Recommandations associées :
Développement PHP (17)-callback-readdir- is_dir- foreach-glob-PhpStorm
java-concurrency-Callable, Future et FutureTask
php-Appel à une fonction membre assign() sur
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!