Maison  >  Article  >  développement back-end  >  Comment utiliser la méthode php __set() ?

Comment utiliser la méthode php __set() ?

青灯夜游
青灯夜游original
2020-11-05 12:13:203337parcourir

En PHP, la méthode __set() peut être utilisée pour définir des valeurs pour les propriétés des membres privés. Elle sera déclenchée lors de l'attribution d'une valeur à une propriété non définie ; le format de syntaxe est "__set($property, $value)", avec deux paramètres, le premier paramètre spécifie le nom de l'attribut, le deuxième paramètre est la valeur à définir pour l'attribut, il n'y a pas de valeur de retour.

Comment utiliser la méthode php __set() ?

Recommandé : "Tutoriel vidéo PHP"

De manière générale, définissez toujours les attributs d'une classe comme privés, ce qui correspond davantage à une logique réaliste. Cependant, les opérations de lecture et d'affectation des attributs sont très fréquentes, ainsi en PHP5, deux fonctions "__get()" et "__set()" sont prédéfinies pour obtenir et attribuer des attributs. La méthode

  • __set() est utilisée pour définir les valeurs des propriétés privées. La méthode

  • __get() est utilisée pour obtenir les valeurs d'attributs privés.

En PHP5, nous disposons de méthodes spéciales pour définir et obtenir des valeurs pour les attributs, les deux méthodes "__set()" et "__get()". n'existe pas par défaut, mais nous l'ajoutons manuellement à la classe. Comme la méthode constructeur (__construct()), elle n'existera que si elle est ajoutée à la classe. Vous pouvez bien sûr ajouter ces deux méthodes comme suit. Vous pouvez également appuyer sur Ajouter votre style personnel : méthode

//__set()方法用来设置私有属性
public function __set($name,$value){
$this->$name = $value;
}
//__get()方法用来获取私有属性
public function __get($name){
return $this->$name;
}

__get() : Cette méthode est utilisée pour obtenir la valeur d'un attribut de membre privé. Elle a un paramètre. Le paramètre est passé dans le nom du membre. attribut que vous souhaitez obtenir, et la valeur de l'attribut obtenue est renvoyée, nous n'avons pas besoin d'appeler cette méthode manuellement, car nous pouvons également faire de cette méthode une méthode privée, qui est automatiquement appelée par l'objet lorsque l'attribut privé est directement. obtenu. Étant donné que la propriété privée a été encapsulée, la valeur ne peut pas être obtenue directement. Cependant, si vous ajoutez cette méthode à la classe, vous obtiendrez automatiquement la valeur directement lors de l'utilisation d'une instruction telle que "echo$p1->Name". la méthode __get($name) et transmettez le nom de l'attribut au paramètre $name Grâce à l'exécution interne de cette méthode, la valeur de l'attribut privé que nous avons transmis est renvoyée. Si les propriétés du membre ne sont pas encapsulées comme privées, l'objet lui-même n'appellera pas automatiquement cette méthode.

Méthode __set( $property, $value ) : Cette méthode est utilisée pour définir les valeurs des propriétés des membres privés. Elle comporte deux paramètres. Le premier paramètre est le nom de la propriété dont vous souhaitez définir la valeur. pour et le deuxième paramètre Les paramètres sont les valeurs à définir pour les propriétés, et il n'y a pas de valeur de retour. Cette méthode n'a pas non plus besoin d'être appelée manuellement. Elle peut également être rendue privée. Elle est automatiquement appelée lors de la définition directe de la valeur de l'attribut privé. S'il n'y a pas de méthode __set(), ce n'est pas le cas. autorisé, par exemple : $this->name='zhangsan', cela provoquera une erreur, mais si vous ajoutez la méthode __set($property_name, $value) à la classe, lors de l'attribution directe de valeurs aux propriétés privées, il sera appelé automatiquement, en passant l'attribut tel que le nom à $property_name et en passant la valeur "zhangsan" à attribuer à $value. Grâce à l'exécution de cette méthode, l'objectif de l'affectation est atteint. Si les propriétés du membre ne sont pas encapsulées comme privées, l'objet lui-même n'appellera pas automatiquement cette méthode. Afin de ne pas transmettre de valeurs illégales, vous pouvez également porter un jugement avec cette méthode. Le code est le suivant :

 <?php 
class Person 
{ 
//下面是人的成员属性,都是封装的私有成员 
private $name; //人的名子 
private $sex; //人的性别 
private $age; //人的年龄 
//__get()方法用来获取私有属性 
private function __get($property_name) 
{ 
echo "在直接获取私有属性值的时候,自动调用了这个__get()方法<br>"; 
if(isset($this->$property_name)) 
{ 
return($this->$property_name); 
} 
else 
{ 
return(NULL); 
} 
} 
//__set()方法用来设置私有属性 
private function __set($property_name, $value) 
{ 
echo "在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值<br>"; 
$this->$property_name = $value; 
} 
} 
$p1=newPerson(); 
//直接为私有属性赋值的操作,会自动调用__set()方法进行赋值 
$p1->name="张三"; 
$p1->sex="男"; 
$p1->age=20; 
//直接获取私有属性的值,会自动调用__get()方法,返回成员属性的值 
echo "姓名:".$p1->name."<br>"; 
echo "性别:".$p1->sex."<br>"; 
echo "年龄:".$p1->age."<br>"; 
?>

Résultat de l'exécution du programme :

在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
在直接获取私有属性值的时候,自动调用了这个__get()方法
姓名:张三
在直接获取私有属性值的时候,自动调用了这个__get()方法
性别:男
在直接获取私有属性值的时候,自动调用了这个__get()方法
年龄:20

Si le code ci-dessus n'ajoute pas les méthodes __get() et __set(), le programme générera une erreur car il ne peut pas être utilisé en dehors de la classe, et le code ci-dessus nous aide à accéder directement aux membres privés encapsulés en appelant automatiquement les méthodes __get() et __set().

Pour plus de connaissances sur la programmation, veuillez visiter : Introduction à la programmation ! !

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