Maison >développement back-end >Problème PHP >Comment utiliser les méthodes magiques php __get() et __set()

Comment utiliser les méthodes magiques php __get() et __set()

青灯夜游
青灯夜游original
2021-07-06 17:57:291979parcourir

"__set()" est automatiquement appelé lors de l'attribution d'une valeur à un attribut non défini, la syntaxe est "public function __set(key,value){}" "__get()" est appelé lorsqu'un attribut non défini est appelé, le la syntaxe est "fonction publique __get(nom){}".

Comment utiliser les méthodes magiques php __get() et __set()

L'environnement d'exploitation de ce tutoriel : système Windows 7, PHP version 7.1, ordinateur DELL G3

Les méthodes magiques en PHP commencent généralement par __ (deux traits de soulignement), et n'ont pas besoin d'être explicitement appelées mais automatiquement appelé sous certaines conditions.

魔术方法 作用
__set() 在给未定义的属性赋值时自动调用
__get() 调用未定义的属性时自动调用

1. Méthode __set()

Lors de l'attribution d'une valeur à un attribut de classe qui est indéfini ou invisible dans l'environnement actuel, la méthode __set() sera automatiquement appelée. Le format syntaxique pour définir cette méthode est le suivant :

public function __set($key, $value){
    ... ... ;
}

Parmi eux, le paramètre $key est le nom de la variable à exploiter, et $value est la valeur de la variable $key.

【Exemple】Ce qui suit utilise un exemple simple pour démontrer l'utilisation de la méthode __set().

<?php
    class Website{
        public $name;
        private $url;
        public function __set($key, $value){
            echo &#39;为“&#39;.$key.&#39;”赋值“&#39;.$value.&#39;”失败!<br>&#39;;
        }
    }
    $object          = new Website();
    $object -> name  = &#39;php中文网&#39;;
    $object -> url   = &#39;https://www.php.cn/&#39;;
    $object -> title = &#39;PHP教程&#39;;
?>

Les résultats d'exécution sont les suivants :

为“url”赋值“https://www.php.cn/”失败!
为“title”赋值“PHP教程”失败!

En utilisant les caractéristiques de la méthode __set(), nous pouvons utiliser la méthode __set() pour attribuer ou modifier des propriétés dans la classe qui sont modifiées avec le mot-clé private. Comme indiqué ci-dessous :

<?php
    class Website{
        public $name;
        private $url = &#39;&#39;;
        public function __set($key, $value){
            if(isset($this->$key)){
                $this -> $key = $value;
            }else{
                echo &#39;为“&#39;.$key.&#39;”赋值“&#39;.$value.&#39;”失败!<br>&#39;;
            }
        }
        public function getUrl(){
            echo $this -> url;
        }
    }
    $object          = new Website();
    $object -> name  = &#39;php中文网&#39;;
    $object -> url   = &#39;https://www.php.cn/&#39;;
    $object -> title = &#39;PHP教程&#39;;
    $object -> getUrl();
?>

Les résultats d'exécution sont les suivants :

为“title”赋值“PHP教程”失败!
https://www.php.cn/

2. Méthode __get()

Lors de l'appel ou de l'obtention d'attributs de classe non définis ou invisibles dans l'environnement actuel, la méthode __get() sera automatiquement appelée. . Le format syntaxique pour définir cette méthode est le suivant :

public function __get($name){
    ... ... ;
}

Le paramètre $name est le nom de la variable à opérer.

【Exemple】Ce qui suit utilise un exemple simple pour démontrer l'utilisation de la méthode __get().

<?php
    class Website{
        public $url = &#39;https://www.php.cn/&#39;;
        private $name = &#39;php中文网&#39;;
        public function __get($name){
            echo &#39;获取:“&#39;.$name.&#39;”失败!&#39;;
        }
    }
    $object = new Website();
    echo $object -> url.&#39;<br>&#39;;
    echo $object -> name.&#39;<br>&#39;;
    echo $object -> title.&#39;<br>&#39;;
?>

Les résultats en cours d'exécution sont les suivants :

https://www.php.cn/
获取:“name”失败!
获取:“title”失败!

Apprentissage recommandé : "Tutoriel vidéo 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!

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