Nach PHP 5.3 wurden neue magische Methoden call und callStatic hinzugefügt.
Aufruf Wenn die aufzurufende Methode nicht vorhanden ist oder nicht über ausreichende Berechtigungen verfügt, wird die Aufrufmethode automatisch aufgerufen.
callStatic Wenn die aufgerufene statische Methode nicht existiert oder nicht über ausreichende Berechtigungen verfügt, wird die callStatic-Methode automatisch aufgerufen.
call($funcname, $arguments) callStatic($funcname, $arguments)
Parameterbeschreibung:
$funcname StringDer Name der aufgerufenen Methode.
$arguments Array-Parameter, die beim Aufruf der Methode verwendet werden.
Aufrufbeispiel
<?php class Member{ protected $memberdata = array(); public function call($func, $arguments){ list($type, $name) = explode('_', $func); if(!in_array($type, array('set','get')) || $name==''){ return ''; } switch($type){ case 'set': $this->memberdata[$name] = $arguments[0]; break; case 'get': return isset($this->memberdata[$name])? $this->memberdata[$name] : ''; break; default: } } } class User extends Member{ public function show(){ if($this->memberdata){ foreach($this->memberdata as $key=>$member){ echo $key.':'.$member.'<br>'; } } } } class Profession extends Member{ public function show(){ if($this->memberdata){ foreach($this->memberdata as $key=>$member){ echo $key.':'.$member.'<br>'; } } } } $userobj = new User(); $userobj->set_name('fdipzone'); $userobj->set_age(29); $userobj->show(); $probj = new Profession(); $probj->set_profession('IT SERVICE'); $probj->set_price(2500); $probj->show(); ?>
callStatic-Beispiel
<?php class Member{ protected static $memberdata = array(); public static function callStatic($func, $arguments){ list($type, $name) = explode('_', $func); if(!in_array($type, array('set','get')) || $name==''){ return ''; } $feature = get_called_class(); switch($type){ case 'set': self::$memberdata[$feature][$name] = $arguments[0]; break; case 'get': return isset(self::$memberdata[$feature][$name])? self::$memberdata[$feature][$name] : ''; break; default: } } } class User extends Member{ public static function show(){ $feature = get_called_class(); if(self::$memberdata[$feature]){ foreach(self::$memberdata[$feature] as $key=>$member){ echo $key.':'.$member.'<br>'; } } } } class Profession extends Member{ public static function show(){ $feature = get_called_class(); if(self::$memberdata[$feature]){ foreach(self::$memberdata[$feature] as $key=>$member){ echo $key.':'.$member.'<br>'; } } } } User::set_name('fdipzone'); User::set_age(29); User::show(); Profession::set_profession('IT SERVICE'); Profession::set_price(2500); Profession::show(); ?>
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der Verwendung und des Unterschieds zwischen __call und __callStatic in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!