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

Comment utiliser __call() en PHP

墨辰丷
墨辰丷original
2018-05-09 15:07:2527261parcourir

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&#39;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==&#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");  
?>

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 &#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();  
?>

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

Les méthodes magiques de php __get(), __set(), __call(), __callStatic() et static Explication détaillée de utilisation

Explication détaillée de l'instance de la méthode magique __call() (tutoriel avancé orienté objet php)

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