Maison >développement back-end >tutoriel php >Comment utiliser __call() en PHP
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 sur un objet qui n'existe pas ou qui est contrôlé par les autorisations, la méthode __call sera automatiquement appelée.
1. Utilisation de __call
<?php class foo { function __call($name,$arguments) { print("Did you call me? I'm $name!"); } } $x = new foo(); $x->doStuff(); $x->fancy_stuff(); ?>
2. Utilisez __call pour mettre en œuvre une 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"); ?>
3. Les deux fonctions _call et ___callStatic sont les fonctions par défaut de la classe PHP
__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 n'est pas accessible, elle sera déclenchée
<?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(); ?>
Résumé :
La fonction __call() est la fonction magique par défaut de la classe PHP __call() sera déclenchée dans le contexte d'un objet si la méthode appelée n'existe pas.
Recommandations associées :
Comment utiliser __call() et __callStatic() en PHP
Comment utiliser la méthode __call() en php et analyser les instances de surcharge
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!