Cet article présente principalement les fonctions et l'utilisation des méthodes magiques courantes en PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
Aperçu
Dans la programmation orientée objet, PHP fournit une série de méthodes magiques, qui offrent beaucoup de commodité pour la programmation. Les méthodes magiques en PHP commencent généralement par __ (deux traits de soulignement) et ne nécessitent pas d'appels explicites mais sont déclenchées par certaines conditions.Avant de commencer
Avant de résumer les méthodes magiques de PHP, définissons deux classes pour des exemples ultérieurs :<?php class Device{ public $name,$battery,$data = [],$connection; protected function connect(){ $this->connection = 'resource'; echo $this->name.'connected'.PHP_EOL; } protected function disconnect(){ $this->connection = null; echo $this->name.'disconnected'.PHP_EOL; } }
<?php class Battery{ private $charge = 0; public function setCharge($charge){ $charge = (int)$charge; if($charge < 0){ $charge = 0; }else if($charge > 100){ $charge = 100; } $this->charge = $charge; } }
Constructeur et destructeur
Le constructeur et le destructeur sont appelés lorsque l'objet est créé et détruit respectivement. Lorsqu'un objet est "détruit", cela signifie qu'il n'y a aucune référence à l'objet. Par exemple, si la variable qui fait référence à l'objet est supprimée (non définie), réaffectée ou si l'exécution du script se termine, le destructeur sera appelé.__construct()
__construct() Le constructeur est de loin la fonction la plus couramment utilisée. Lors de la création d'un objet, vous pouvez effectuer un travail d'initialisation dans le constructeur. Vous pouvez définir n'importe quel nombre de paramètres pour le constructeur, à condition que le nombre correspondant de paramètres soit transmis lors de l'instanciation. Toute exception qui se produit dans le constructeur empêche la création de l'objet.<?php class Device{ public $name,$battery,$data = [],$connection; public function __construct(Battery $battery,$name){ $this->battery = $battery; $this->name = $name; $this->connect(); } protected function connect(){ $this->connection = 'resource'; echo $this->name.'connected'.PHP_EOL; } protected function disconnect(){ $this->connection = null; echo $this->name.'disconnected'.PHP_EOL; } }
Déclarer le constructeur comme méthode privée empêche la création d'objets en dehors de la classe, qui est souvent utilisée dans le modèle simplex.
__desctruct()
Le destructeur est généralement appelé lorsque l'objet est détruit. Le destructeur ne reçoit aucun paramètre. Certains travaux de nettoyage sont souvent effectués dans le destructeur, comme la fermeture de la connexion à la base de données, etc.__get()
La méthode magique __get() est appelée lorsque l'on essaie d'accéder à une propriété inexistante. Il reçoit un paramètre qui représente le nom de l'attribut accédé et renvoie la valeur de l'attribut. Dans la classe Device ci-dessus, il y a un attribut data, qui joue ici un rôle, comme le montre le code suivant :<?php class Device{ public $name,$battery,$data = [],$connection; public function __construct(Battery $battery,$name){ $this->battery = $battery; $this->name = $name; $this->connect(); } protected function connect(){ $this->connection = 'resource'; echo $this->name.'connected'.PHP_EOL; } protected function disconnect(){ $this->connection = null; echo $this->name.'disconnected'.PHP_EOL; } } $battery = new Battery(); $device = new Device($battery,'mac'); echo $device->aaa; //Notice: Undefined property: Device::$aaa
<?phpheader("Content-type: text/html; charset=utf-8"); class Device{ public $name,$battery,$data = [],$connection; public function __construct(Battery $battery,$name){ $this->battery = $battery; $this->name = $name; $this->connect(); } public function __get($name){ if(array_key_exists($name,$this->data)){ return $this->data[$name]; } return '属性不存在'; } protected function connect(){ $this->connection = 'resource'; echo $this->name.'connected'.PHP_EOL; } protected function disconnect(){ $this->connection = null; echo $this->name.'disconnected'.PHP_EOL; } }$battery = new Battery(); $device = new Device($battery,'mac'); echo $device->aaa; //macconnected 属性不存在
<?php class Battery { private $charge = 0; public function __get($name) { if(isset($this->$name)) { return $this->$name; } return null; } }
__set()
__set() sera appelée lorsque nous tenterons de modifier une propriété inaccessible. Elle en reçoit deux. Paramètres, un nom représentant l'attribut et une valeur représentant l'attribut. L'exemple de code est le suivant :<?php header("Content-type: text/html; charset=utf-8"); class Device{ public $name,$battery,$data = [],$connection; public function __construct(Battery $battery,$name){ $this->battery = $battery; $this->name = $name; $this->connect(); } public function __get($name){ if(array_key_exists($name,$this->data)){ return $this->data[$name]; } return '属性不存在'; } public function __set($name,$value){ $this->data[$name] = $value; } protected function connect(){ $this->connection = 'resource'; echo $this->name.'connected'.PHP_EOL; } protected function disconnect(){ $this->connection = null; echo $this->name.'disconnected'.PHP_EOL; } }$battery = new Battery(); $device = new Device($battery,'mac'); $device->aaa = '哈哈'; echo $device->aaa; //macconnected 哈哈
__isset()
La méthode magique __isset() sera appelée lorsque la méthode isset() est appelée sur un serveur inaccessible. propriété. Il reçoit un paramètre représentant le nom de l’attribut. Il doit renvoyer une valeur booléenne indiquant si la propriété existe. Le code est le suivant :<?php class Device{ private function __isset($name){ return array_key_exists($name,$this->data); }
__unset()
__unset() avant d'appeler unset. () est appelée lors de la destruction d'une propriété inaccessible. Elle reçoit un paramètre exprimant le nom de la propriété. Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois ! Recommandations associées :Introduction aux constantes magiques (variables), aux méthodes magiques (fonctions) et aux variables superglobales
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!