call()
Wenn ein Objekt eine Methode __call() besitzt wird diese von der Zend Engine, beim Versuch eine nicht existierende Methode aufzurufen, aufgerufen, anstatt einen Fehler zu erzeugen. Beim Aufruf werden zwei Parameter übergeben. Der erste Übergabewert ist der Name der Methode, welche aufgerufen wurde. Im zweiten Parameter steht ein einfaches Array, welches aus den Argumenten zusammengestellt wird, die der unbekannten Methode übergeben wurden. Der Wert den man über __call() zurückgibt wird an den Aufruf der nicht gesetzten Methode zurückgegeben.
1 echo $Call->unbekannt('param1', 'param2');
Was passiert:
=> Aufruf von __call('unbekannt', array('param1', 'param2'))
=> Auswertung und Rückgabe
Ein Beispielprogramm:
1 class CallTest { 2 function __call($name, $parameterArray) { 3 echo 'Methodenname: ' . $name; 4 echo '<br>'; 5 echo 'Parameter: '; 6 print_r($parameterArray); //Arraywerte anzeigen 7 return '<br>Ich wurde automatisch aufgerufen!'; 8 } 9 } 10 11 $CallTest = new CallTest(); 12 $wert = $CallTest->unbekannt("par1", "par2"); //__call() 13 echo $wert;
Die Klasse CallTest besitzt also eine solche __call() Methode, welche ihren Programmcode beim Aufruf der unbekannten Methode unbekannt() ausführt. __call() selbst erstellt nichts anderes als eine kleine übersichtliche Ausgabe der Parameterwerte und hat einen Rückgabewert, welcher später in der Variable $wert abgelegt wird.
Ausgabe: Methodenname: unbekannt Parameter: Array ( [0] => par1 [1] => par2 ) Ich wurde automatisch aufgerufen!
Mit __call() können z.B. fehlerhafte Zugriffe abgefangen werden. Man spricht auch von Methodenüberladung.