En PHP, les méthodes commençant par deux traits de soulignement sont appelées méthodes magiques. Ces méthodes jouent un rôle déterminant en PHP.
construct() et destruct()
Constructeur et destructeur devraient être familiers, ils sont utilisés dans la création d'objets et la destruction est appelé quand. Par exemple, nous devons ouvrir un fichier, l'ouvrir lorsque l'objet est créé et le fermer lorsque l'objet meurt
<?php class FileRead { protected $handle = NULL; function construct(){ $this->handle = fopen(...); } function destruct(){ fclose($this->handle); } } ?>
Ces deux méthodes peuvent être développées en cas d'héritage, par exemple :
.<?php class TmpFileRead extends FileRead { function construct(){ parent::construct(); } function destruct(){ parent::destruct(); } } ?>
call() et callStatic()
Ces deux méthodes sont appelées lorsqu'une méthode inaccessible est appelée dans l'objet, et cette dernière est une méthode statique. Ces deux méthodes peuvent être utilisées dans les appels de méthodes variables (fonctions variables).
<?php class MethodTest { public function call ($name, $arguments) { echo "Calling object method '$name' ". implode(', ', $arguments). "\n"; } public static function callStatic ($name, $arguments) { echo "Calling static method '$name' ". implode(', ', $arguments). "\n"; } } $obj = new MethodTest; $obj->runTest('in object context'); MethodTest::runTest('in static context'); ?>
get(), set(), isset() et unset()
Ces deux sont appelés lors de l'obtention/définition d'une variable membre d'une classe fonction. Par exemple, nous enregistrons les variables de l'objet dans un autre tableau au lieu des variables membres de l'objet lui-même
<?php class MethodTest { private $data = array(); public function set($name, $value){ $this->data[$name] = $value; } public function get($name){ if(array_key_exists($name, $this->data)) return $this->data[$name]; return NULL; } public function isset($name){ return isset($this->data[$name]) } public function unset($name){ unset($this->data[$name]); } } ?>
sleep() et wakeup()
Quand nous sont dans Lors de l'exécution de serialize() et unserialize(), ces deux fonctions seront appelées en premier. Par exemple, lorsque nous sérialisons un objet, l'objet possède un lien de base de données. Si nous souhaitons restaurer l'état du lien lors de la désérialisation, nous pouvons restaurer le lien en reconstruisant ces deux fonctions. Un exemple est le suivant :
<?php class Connection { protected $link; private $server, $username, $password, $db; public function construct($server, $username, $password, $db) { $this->server = $server; $this->username = $username; $this->password = $password; $this->db = $db; $this->connect(); } private function connect() { $this->link = mysql_connect($this->server, $this->username, $this->password); mysql_select_db($this->db, $this->link); } public function sleep() { return array('server', 'username', 'password', 'db'); } public function wakeup() { $this->connect(); } } ?>
toString()
La méthode de réponse lorsque l'objet est traité comme une chaîne. Par exemple, utilisez echo $obj; pour générer un objet
<?php // Declare a simple class class TestClass { public function toString() { return 'this is a object'; } } $class = new TestClass(); echo $class; ?>
Cette méthode ne peut renvoyer qu'une chaîne, et vous ne pouvez pas lancer une exception dans cette méthode, sinon une erreur fatale. se produira.
invoke()
La méthode de réponse lors de l'appel d'un objet en appelant une fonction. Comme suit
<?php class CallableClass { function invoke() { echo 'this is a object'; } } $obj = new CallableClass; var_dump(is_callable($obj)); ?>
set_state()
Lors de l'appel de var_export() pour exporter une classe, cette méthode statique sera appelée.
<?php class A { public $var1; public $var2; public static function set_state ($an_array) { $obj = new A; $obj->var1 = $an_array['var1']; $obj->var2 = $an_array['var2']; return $obj; } } $a = new A; $a->var1 = 5; $a->var2 = 'foo'; var_dump(var_export($a)); ?>
clone()
Appelé lorsque la copie de l'objet est terminée. Par exemple, dans la méthode d'implémentation en mode singleton mentionnée dans l'article Explication détaillée des modèles de conception et implémentation PHP : mode Singleton, cette fonction est utilisée pour empêcher le clonage d'objets.
<?php public class Singleton { private static $_instance = NULL; // 私有构造方法 private function construct() {} public static function getInstance() { if (is_null(self::$_instance)) { self::$_instance = new Singleton(); } return self::$_instance; } // 防止克隆实例 public function clone(){ die('Clone is not allowed.' . E_USER_ERROR); } } ?>
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!