Maison  >  Article  >  développement back-end  >  Comment utiliser __call() en PHP

Comment utiliser __call() en PHP

墨辰丷
墨辰丷original
2018-05-16 14:35:303317parcourir

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&#39;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==&#39;foo&#39;) {  
  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 &#39;$name&#39; ");  
}  
  
}  
}  
  
class User extends Obj  
{  
public function show()  
{  
print ("Username: ".$this->property[&#39;Username&#39;]."<br>;");  
//print ("Username: ".$this->getUsername()."<br>;");  
print ("Sex: ".$this->property[&#39;Sex&#39;]."<br>;");  
print ("Age: ".$this->property[&#39;Age&#39;]."<br>;");  
}  
}  
  
class Car extends Obj  
{  
public function show()  
{  
print ("Model: ".$this->property[&#39;Model&#39;]."<br>;");  
print ("Sum: ".$this->property[&#39;Number&#39;] * $this ->property[&#39;Price&#39;]."<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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn