Maison  >  Article  >  développement back-end  >  Fonctions et utilisation courantes de la méthode magique en PHP

Fonctions et utilisation courantes de la méthode magique en PHP

不言
不言original
2018-07-05 11:35:502455parcourir

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 = &#39;resource&#39;;        
echo $this->name.&#39;connected&#39;.PHP_EOL;
    }    
    protected function disconnect(){       
    $this->connection = null;        
    echo $this->name.&#39;disconnected&#39;.PHP_EOL;
    }
}
Classe de périphérique Il y a quatre membres propriétés et deux méthodes membres.

<?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;
    }
}
La classe Battery a une propriété membre et une méthode membre.

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 = &#39;resource&#39;;        
    echo $this->name.&#39;connected&#39;.PHP_EOL;
    }    protected function disconnect(){        
    $this->connection = null;        
    echo $this->name.&#39;disconnected&#39;.PHP_EOL;
    }
}
Dans l'exemple de code ci-dessus, le constructeur de la classe Device attribue des valeurs aux propriétés des membres et appelle la méthode connect().

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 = &#39;resource&#39;;        
    echo $this->name.&#39;connected&#39;.PHP_EOL;
    }    
    protected function disconnect(){        
    $this->connection = null;        
    echo $this->name.&#39;disconnected&#39;.PHP_EOL;
    }
}
$battery = new Battery();
$device = new Device($battery,&#39;mac&#39;);
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 &#39;属性不存在&#39;;
    }    
    protected function connect(){        
    $this->connection = &#39;resource&#39;;        
    echo $this->name.&#39;connected&#39;.PHP_EOL;
    }    protected function disconnect(){        
    $this->connection = null;        
    echo $this->name.&#39;disconnected&#39;.PHP_EOL;
    }
}$battery = new Battery();
$device = new Device($battery,&#39;mac&#39;);
echo $device->aaa; //macconnected 属性不存在
L'endroit le plus couramment utilisé pour cette méthode magique est de créer un Attribut "Lecture seule" pour étendre le contrôle d'accès. Dans la classe Battery ci-dessus, il existe un attribut privé $charge. Nous pouvons étendre cet attribut via la méthode magique __get() pour qu'il soit lisible mais non modifiable en dehors de la classe. Le code est le suivant : La méthode magique

<?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 &#39;属性不存在&#39;;
    }    
    public function __set($name,$value){        
    $this->data[$name] = $value;
    }    protected function connect(){        
    $this->connection = &#39;resource&#39;;        
    echo $this->name.&#39;connected&#39;.PHP_EOL;
    }    protected function disconnect(){        
    $this->connection = null;        
    echo $this->name.&#39;disconnected&#39;.PHP_EOL;
    }
}$battery = new Battery();
$device = new Device($battery,&#39;mac&#39;);
$device->aaa = &#39;哈哈&#39;;
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);
    }
Si les membres de l'objet sont publics, vous pouvez utiliser directement la fonction isset(). S'il s'agit d'un attribut de membre privé, vous devez ajouter une méthode magique __isset() à la classe

__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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn