Maison >développement back-end >tutoriel php >Un résumé concis de la méthode Magic dans les classes PHP
1. __construct() et __destruct()
sont appelés lorsque l'instance est créée/détruite et peuvent transmettre 0 ou plusieurs paramètres.
class A { function A() { echo "build A"; } function __destruct() { echo "destroy A"; } } $obj = new A(); //unset($obj);
Remarque : La méthode destructeur sera appelée dès qu'il n'y aura plus d'autres références à un objet particulier, ou dans n'importe quel ordre pendant la séquence d'arrêt .
Concernant les constructeurs, à partir de PHP 5.3.3, une méthode nommée avec le nom de la classe dans une classe définie dans un espace de noms spécifique ne sera plus considérée comme un constructeur. Dans une classe sans espace de noms, c'est toujours un constructeur comme avant. Par exemple :
namespace Foo; class Bar { public function Bar() { // treated as constructor in PHP 5.3.0-5.3.2 // treated as regular method as of PHP 5.3.3 } }
S'il n'y a pas d'espace de noms Foo alors Bar() sera également utilisé comme constructeur. De plus, si la situation suivante existe :
function __construct() { echo "construct A"; } function A() { echo "build A"; } function __destruct() { echo "destroy A"; } }
c'est-à-dire qu'elle contient à la fois __construct() et une fonction portant le même nom que le nom de la classe , alors seul _ sera appelé _construct().
2. __call() et __callStatic()
Appelés lors de la tentative d'appel d'une méthode qui n'existe pas. Deux paramètres, l'un est le nom de la méthode et l'autre est le tableau de paramètres de la méthode appelée.
class MethodTest { public function __call($name, $arguments) { // Note: value of $name is case sensitive. echo "Calling object method '$name' " . implode(' ', $arguments). "<br>"; } public static function __callStatic($name, $arguments) { // Note: value of $name is case sensitive. echo "Calling static method '$name' " . implode(' ', $arguments). "<br>"; } } $obj = new MethodTest; $obj->runTest('in','object','context'); MethodTest::runTest('in','static','context');
Parmi eux, $arguments est transmis sous forme de tableau. Résultats d'exécution :
Appel de la méthode objet 'runTest' dans un contexte d'objet
Appel de la méthode statique 'runTest' dans un contexte statique
Faites également attention à la portée de la fonction protected et private :
class TestMagicCallMethod { public function foo() { echo __METHOD__.PHP_EOL."<br>"; } public function __call($method, $args) { echo __METHOD__.PHP_EOL."<br>"; if(method_exists($this, $method)) { $this->$method(); } } protected function bar() { echo __METHOD__.PHP_EOL."<br>"; } private function baz() { echo __METHOD__.PHP_EOL."<br>"; } } $test = new TestMagicCallMethod(); $test->foo(); /** * Outputs: * TestMagicCallMethod::foo */ $test->bar(); /** * Outputs: * TestMagicCallMethod::__call * TestMagicCallMethod::bar */ $test->baz(); /** * Outputs: * TestMagicCallMethod::__call * TestMagicCallMethod::baz */
3.__get() et __set()
sont appelés lors de la tentative de lecture des propriétés d'un objet qui n'existent pas.
Remarque : Nous pouvons utiliser cette fonction pour implémenter diverses opérations similaires à la réflexion en Java.
class Test { public function __get($key) { echo $key . " not exists"; } public function __set($key,$value) { echo $key . " = ".$value; } } $t = new Test(); echo $t->name."<br>"; $t->name = "abc";
Sortie :
le nom n'existe pas
name = abc
4. 🎜> Cette méthode est similaire à la méthode toString() de Java. Lorsque nous imprimons directement l'objet, nous appelons cette fonction. La fonction doit renvoyer une chaîne.
class Test { private $name = "abc"; private $age = 12; public function __toString() { return "name : $this->name, age : $this->age"; } } $t = new Test(); echo $t;
Sortie :
nom : abc, âge : 12
Plus de méthodes magiques dans les classes PHP (Magic Méthode) Pour un résumé concis des articles connexes, veuillez faire attention au site Web PHP chinois !