Maison >développement back-end >tutoriel php >Vous faire comprendre les méthodes magiques en PHP en cinq minutes (exemples détaillés)
Dans l'article précédent, je vous ai présenté "Utilisation du mot-clé clone et de la méthode __clone() en PHP (exemples détaillés)", qui vous a donné une introduction détaillée au mot-clé clone et à la méthode __clone() en PHP, ceci. l'article continuera à vous apporter les méthodes magiques en PHP, j'espère qu'il vous sera utile !
Dans notre article précédent, lorsque nous avons présenté la méthode __clone(), nous avons mentionné qu'il s'agissait d'une sorte de méthode magique. Elle est également mentionnée dans "Vous amène à distinguer le constructeur et le destructeur dans une classe". Les constructeurs et destructeurs mentionnés sont également appelés constructeurs et destructeurs, et ils constituent également un type de méthode magique. Alors, qu’est-ce qu’une méthode magique ? Quelles sont les méthodes couramment utilisées ? Comment est-il utilisé ? Jetons un coup d'œil ensuite.
Dans la programmation orientée objet PHP, il existe une série de méthodes magiques en PHP Pour ces méthodes magiques, jetez un œil au __clone
__constructcode><code>__destruct
Nous pouvons trouver une chose en commun, c'est qu'ils commencent tous par deux traits de soulignement __
, et sont automatiquement appelés sous certaines conditions. __clone
__construct
__destruct
我们能发现一个共同点,那就是它们都是由__
两个下划线开始的,并且都是在某种特定的条件下自动调用的。
那接下来我们来看一看一些常用的魔术方法,结合实例来看一下它们的使用方法。
<strong><span style="font-size: 18px;">__set()</span></strong>
方法
__set()
方法用于在为当前环境下未定义或不可见的类属性赋值时,需要注意的是所有的魔术方法,都是在某种特定条件下自动调用的,为当前环境下未定义或不可见的类属性赋值时就是__set()
方法调用的特定条件。
语法格式如下:
public function __set(要操作的变量, 要操作变量的值){ ... ... ; }
实例如下:
<?php class father{ public $study1; private $study2; public function __set($key, $value){ echo '为“'.$key.'”赋值“'.$value.'”失败!<br>'; } } $object = new father(); $object -> study1 = '好好学习'; $object -> study2 = '天天向上'; $object -> study3 = '福如东海'; ?>
输出结果:
由上述实例看出,当当前环境下未定义或不可见的类属性赋值时,就会调用__set()方法。
<strong><span style="font-size: 18px;">__get()</span></strong>
方法
自动调用 __get()
方法的特定条件是在调用或获取当前环境下未定义或不可见的类属性时,定义该方法的语法格式如下:
public function __get($name){ ... ... ; }
其中参数$name表示要操作的变量名称,下面通过实例我们来看一下__get()方法的使用,实例如下:
<?php class father{ public $study = '好好学习'; private $study1 = '天天向上'; public function __get($study1){ echo '获取:“'.$study1.'”失败!'; } } $object = new father(); echo $object -> study.'<br>'; echo $object -> study1.'<br>'; echo $object -> study2.'<br>'; ?>
输出结果:
由上述结果可以看出在调用或获取当前环境下未定义或不可见的类属性时,会自动调用 __get() 方法。
<strong><span style="font-size: 18px;">__isset()</span></strong>
方法
自动调用 __isset() 方法的特定条件是当在类外部对类中不可访问或不存在的属性使用 isset()
或 empty()
函数时,该方法的语法格式如下:
public function __isset($name){ ... ... ; }
其中我们需要注意的是:
参数 $name 为要访问的属性名称。
isset()
函数是用来检查一个变量是否存在并且还要判断不为 NULL,如果传入的变量存在则传回 true,不存在传回 false。
empty()
函数是用来检查一个变量是否为空,如果变量的值等于 FALSE,那么这个变量会被认为不存在。
如果想要使用 isset() 或 empty() 函数对类中的私有属性进行检测的话,我们只需要在类中添加一个 __isset() 方法就可以了,当在类外部使用 isset() 或 empty() 函数时,会自动调用类里面的 __isset() 方法。
接下来我们通过实例来看一下__isset()方法的使用,实例如下:
<?php class father{ public $study = '好好学习'; private $name = '天天向上'; public function __isset($name){ if(property_exists('Website', $name)){ echo '成员属性:“'.$name.'”存在!<br>'; }else{ echo '成员属性:“'.$name.'”不存在!<br>'; } } } $object = new father(); isset($object -> mother); isset($object -> name); ?>
输出结果:
其中我们需要注意的是,property_exists()
函数可以用来检测类中是否定义了该属性,语法格式为
property_exists($class_name,$property_name)
其中 $class_name 为字符串形式的类名,即判断类 class_name 中是否定义了 property_name 属性。
<strong><span style="font-size: 18px;">__unset() </span></strong>
方法
自动调用__unset()
Jetons ensuite un coup d'œil à quelques méthodes magiques couramment utilisées et comment les utiliser avec des exemples.
<strong><span style="font-size: 18px;">__set()</span></strong>
Méthode🎜🎜__set()
La méthode est utilisée pour attribuer des valeurs aux attributs de classe qui sont indéfinis ou invisibles dans l'environnement actuel. Ce dont vous avez besoin faites attention, c'est que toutes les méthodes magiques sont automatiquement appelées dans certaines conditions spécifiques. Lors de l'attribution de valeurs à des attributs de classe non définis ou invisibles dans l'environnement actuel, c'est la condition spécifique pour appeler __set()
. méthode. 🎜🎜Le format de syntaxe est le suivant : 🎜public function __unset($name){ ... ... ; }🎜L'exemple est le suivant : 🎜🎜
<?php class father{ public $name = 'http://c.biancheng.net/php/'; private $study = 'C语言中文网'; public function __unset($study){ if(property_exists('father', $study)){ unset($this->$study); echo '移除成员属性:“'.$study.'”成功!<br>'; }else{ echo '成员属性:“'.$study.'”不存在!<br>'; } } } $object = new father(); unset($object->name); unset($object->study); unset($object->study1); ?>🎜 Résultat de sortie : 🎜🎜🎜🎜Comme le montre l'exemple ci-dessus, lorsqu'un attribut de classe non défini ou invisible se voit attribuer une valeur dans l'environnement actuel, le La méthode __set() sera appelée. 🎜🎜
<strong><span style="max-width:90%">__get()</span></strong>
Méthode🎜🎜🎜La condition spécifique pour appeler automatiquement la méthode __get()
est de définir l'attribut de classe lors de l'appel ou de l'obtention d'un attribut de classe non défini ou invisible dans le environnement actuel. Le format de syntaxe de la méthode est le suivant : 🎜rrreee🎜Le paramètre $name représente le nom de la variable à exploiter. Regardons l'utilisation de la méthode __get() à travers un exemple. comme suit : 🎜rrreee🎜Résultat de sortie : 🎜🎜🎜🎜🎜Cela peut être vu à partir des résultats ci-dessus. La méthode __get() est automatiquement appelée lors de l'appel ou de l'obtention d'un attribut de classe qui n'est pas défini ou invisible dans l'environnement actuel. 🎜🎜<strong><span style="max-width:90%">__isset()</span></strong>
Méthode🎜🎜La condition spécifique pour appeler automatiquement la méthode __isset() est lorsque isset()
est utilisé en dehors de la classe pour une propriété inaccessible ou non existe dans la classe ou la fonction empty()
, le format de syntaxe de cette méthode est le suivant : 🎜🎜rrreee🎜Ce à quoi nous devons faire attention est : 🎜🎜Le paramètre $name est le nom de l'attribut auquel accéder. 🎜La fonction isset()
est utilisée pour vérifier si une variable existe et détermine également si elle n'est pas NULL. est passé dans Renvoie vrai si la variable existe, renvoie faux si elle n'existe pas. 🎜empty()
La fonction permet de vérifier si une variable est vide. Si la valeur de la variable est égale à FALSE, alors la variable sera considérée comme non vide. exister. 🎜property_exists() peut être utilisée pour détecter si la propriété est définie dans la classe. Le format de syntaxe est 🎜rrreee🎜, où $class_name est le nom de la classe sous la forme d'une chaîne. autrement dit, il est déterminé si l'attribut property_name est défini dans la classe class_name. 🎜🎜<code><strong><span style="max-width:90%">__unset() </span></strong>
Méthode🎜🎜La condition spécifique pour appeler automatiquement la méthode __unset()
est lorsque la fonction unset() est utilisée en dehors de la classe sur une propriété inaccessible ou n'existe pas dans la classe , le format syntaxique de cette méthode est le suivant : 🎜🎜public function __unset($name){ ... ... ; }
其中我们需要注意的是:
参数 $name 为要访问的属性名称。
unset() 函数的作用是删除指定的变量,需要传入一个或多个变量作为参数,另外,该函数没有返回值。
可以使用 unset() 函数在类外部去删除类中的成员属性。如果要删除类中的公有属性的话直接使用 unset() 函数即可;
如果要删除类中的私有属性的话,则需要在类中添加一个 __unset() 方法。
接下来我们通过实例来看一下__unset()方法的使用,实例如下:
<?php class father{ public $name = 'http://c.biancheng.net/php/'; private $study = 'C语言中文网'; public function __unset($study){ if(property_exists('father', $study)){ unset($this->$study); echo '移除成员属性:“'.$study.'”成功!<br>'; }else{ echo '成员属性:“'.$study.'”不存在!<br>'; } } } $object = new father(); unset($object->name); unset($object->study); unset($object->study1); ?>
输出结果:
由上述实例看出当在类外部对类中不可访问或不存在的属性使用 unset() 函数时,__unset() 方法会被自动调用。
上述实例中给大家介绍了一些常用的魔术方法,但这并不是魔术方法的全部,那接下来再给大家列举一些魔术方法:
__call()
--- 调用一个不存在的方法时自动调用
__sleep()
--- 使用 serialize 序列化时自动调用
__toString()
--- 把对象转换成字符串时自动调用
__invoke()
--- 当尝试把对象当方法调用时自动调用
__wakeup()
--- 使用 unserialize 反序列化时自动调用
__callStatic()
--- 调用一个不存在的静态方法时自动调用
__debugInfo()
--- 使用 var_dump() 打印对象信息时自动调用
__set_state()
--- 当使用 var_export() 函数时自动调用,接受一个数组参数
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
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!