Heim > Backend-Entwicklung > PHP-Tutorial > So verwenden Sie __call() in PHP

So verwenden Sie __call() in PHP

墨辰丷
Freigeben: 2023-03-25 18:14:02
Original
27263 Leute haben es durchsucht

PHP5-Objekte verfügen über eine neue spezielle Methode __call(), die zur Überwachung anderer Methoden in einem Objekt verwendet wird. Wenn Sie versuchen, eine Methode für ein Objekt aufzurufen, das nicht existiert oder berechtigungsgesteuert ist, wird die __call-Methode automatisch aufgerufen.

1. Die Verwendung von __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();  
?>
Nach dem Login kopieren

2. Verwendung von __call zur Implementierung der „Überlastungs“-Aktion

<?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");  
?>
Nach dem Login kopieren

3 Die beiden Funktionen ._call und ___callStatic sind die Standardfunktionen der PHP-Klasse

__call() Wenn im Kontext eines Objekts nicht auf die aufgerufene Methode zugegriffen werden kann wird ausgelöst

__callStatic() Wenn in einem statischen Kontext nicht auf die aufgerufene Methode zugegriffen werden kann, wird sie ausgelöst

<?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();  
?>
Nach dem Login kopieren

Zusammenfassung:

Die Funktion __call() ist die standardmäßige magische Funktion der PHP-Klasse. __call() wird im Kontext eines Objekts ausgelöst, wenn die aufgerufene Methode nicht existiert.

Verwandte Empfehlungen:

So verwenden Sie __call() und __callStatic() in PHP

So verwenden Sie die __call()-Methode in der PHP- und Überladungsinstanzanalyse

PHPs magische Methoden __get(), __set(), __call(), __callStatic() und static Detaillierte Erklärung von Verwendung

Detaillierte Erläuterung der Instanz der magischen Methode __call() (PHP-Tutorial für fortgeschrittene Objekte)

Das obige ist der detaillierte Inhalt vonSo verwenden Sie __call() in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage