Heim  >  Artikel  >  Backend-Entwicklung  >  Machen Sie sich in fünf Minuten mit den magischen Methoden in PHP vertraut (detaillierte Beispiele)

Machen Sie sich in fünf Minuten mit den magischen Methoden in PHP vertraut (detaillierte Beispiele)

WBOY
WBOYOriginal
2021-10-25 17:53:203996Durchsuche

Im vorherigen Artikel habe ich Ihnen „Verwendung des Schlüsselworts clone und der Methode __clone() in PHP (detaillierte Beispiele)“ vorgestellt, der Ihnen eine detaillierte Einführung in das Schlüsselwort clone und die Methode __clone() in PHP gegeben hat Der Artikel wird Ihnen weiterhin die magischen Methoden in PHP vorstellen, ich hoffe, er wird Ihnen hilfreich sein!

Machen Sie sich in fünf Minuten mit den magischen Methoden in PHP vertraut (detaillierte Beispiele)

Als wir in unserem vorherigen Artikel die Methode __clone() vorgestellt haben, haben wir erwähnt, dass es sich um eine Art magische Methode handelt. Sie wird auch in „Unterscheiden Sie den Konstruktor und den Destruktor in einer Klasse“ erwähnt. Die genannten Konstruktoren und Destruktoren werden auch Konstruktoren und Destruktoren genannt und sind ebenfalls eine Art magische Methode. Was ist also eine magische Methode? Was sind die am häufigsten verwendeten Methoden? Wie wird es verwendet? Werfen wir als nächstes einen Blick darauf.

Magische PHP-Methoden


In der objektorientierten PHP-Programmierung gibt es eine Reihe magischer Methoden in PHP. Schauen Sie sich für diese magischen Methoden den __clone__construct an. code><code>__destructEines haben wir gemeinsam: Sie beginnen alle mit zwei Unterstrichen __ und werden unter bestimmten Bedingungen automatisch aufgerufen.

__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 &#39;为“&#39;.$key.&#39;”赋值“&#39;.$value.&#39;”失败!<br>&#39;;
        }
    }
    $object          = new father();
    $object -> study1  = &#39;好好学习&#39;;
    $object -> study2   = &#39;天天向上&#39;;
    $object -> study3 = &#39;福如东海&#39;;
?>

    输出结果:

Machen Sie sich in fünf Minuten mit den magischen Methoden in PHP vertraut (detaillierte Beispiele)

由上述实例看出,当当前环境下未定义或不可见的类属性赋值时,就会调用__set()方法。

<strong><span style="font-size: 18px;">__get()</span></strong>方法

自动调用 __get() 方法的特定条件是在调用或获取当前环境下未定义或不可见的类属性时,定义该方法的语法格式如下:

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

其中参数$name表示要操作的变量名称,下面通过实例我们来看一下__get()方法的使用,实例如下:

<?php
    class father{
        public $study = &#39;好好学习&#39;;
        private $study1 = &#39;天天向上&#39;;
        public function __get($study1){
            echo &#39;获取:“&#39;.$study1.&#39;”失败!&#39;;
        }
    }
    $object = new father();
    echo $object -> study.&#39;<br>&#39;;
    echo $object -> study1.&#39;<br>&#39;;
    echo $object -> study2.&#39;<br>&#39;;
?>

输出结果:

Machen Sie sich in fünf Minuten mit den magischen Methoden in PHP vertraut (detaillierte Beispiele)

由上述结果可以看出在调用或获取当前环境下未定义或不可见的类属性时,会自动调用 __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 = &#39;好好学习&#39;;
        private $name = &#39;天天向上&#39;;
        public function __isset($name){
            if(property_exists(&#39;Website&#39;, $name)){
                echo &#39;成员属性:“&#39;.$name.&#39;”存在!<br>&#39;;
            }else{
                echo &#39;成员属性:“&#39;.$name.&#39;”不存在!<br>&#39;;
            }
        }
    }
    $object = new father();
    isset($object -> mother);
    isset($object -> name);
?>

输出结果:

Machen Sie sich in fünf Minuten mit den magischen Methoden in PHP vertraut (detaillierte Beispiele)

其中我们需要注意的是,property_exists() 函数可以用来检测类中是否定义了该属性,语法格式为

 property_exists($class_name,$property_name)

其中 $class_name 为字符串形式的类名,即判断类 class_name 中是否定义了 property_name 属性。

<strong><span style="font-size: 18px;">__unset() </span></strong>方法

自动调用__unset()Dann werfen wir einen Blick auf einige häufig verwendete Zaubermethoden und deren Anwendung anhand von Beispielen.

🎜<strong><span style="font-size: 18px;">__set()</span></strong>Methode🎜🎜__set()Die Methode wird verwendet, um Klassenattributen Werte zuzuweisen, die in der aktuellen Umgebung undefiniert oder unsichtbar sind. Was Sie tun müssen Achten Sie darauf, dass alle magischen Methoden unter bestimmten Bedingungen automatisch aufgerufen werden. Beim Zuweisen von Werten zu undefinierten oder unsichtbaren Klassenattributen in der aktuellen Umgebung ist dies die spezifische Bedingung für den Aufruf von __set() Verfahren. 🎜🎜Das Syntaxformat lautet wie folgt: 🎜
public function __unset($name){
    ... ... ;
}
🎜Das Beispiel lautet wie folgt: 🎜🎜
<?php
    class father{
        public $name = &#39;http://c.biancheng.net/php/&#39;;
        private $study = &#39;C语言中文网&#39;;
        public function __unset($study){
            if(property_exists(&#39;father&#39;, $study)){
                unset($this->$study);
                echo &#39;移除成员属性:“&#39;.$study.&#39;”成功!<br>&#39;;
            }else{
                echo &#39;成员属性:“&#39;.$study.&#39;”不存在!<br>&#39;;
            }
        }
    }
    $object = new father();
    unset($object->name);
    unset($object->study);
    unset($object->study1);
?>
🎜 Ausgabeergebnis: 🎜🎜Machen Sie sich in fünf Minuten mit den magischen Methoden in PHP vertraut (detaillierte Beispiele)🎜🎜Wie aus dem obigen Beispiel ersichtlich ist, wird die Die Methode __set() wird aufgerufen. 🎜🎜<strong><span style="max-width:90%">__get()</span></strong><strong><span style="font-size: 18px;">__get()</span></strong>Methode🎜🎜🎜Die spezifische Bedingung für den automatischen Aufruf der Methode __get() besteht darin, das Klassenattribut zu definieren, wenn ein undefiniertes oder unsichtbares Klassenattribut in aufgerufen oder abgerufen wird Aktuelle Umgebung. Das Syntaxformat der Methode ist wie folgt: 🎜rrreee🎜Der Parameter $name stellt den Namen der zu bedienenden Variablen dar. Schauen wir uns die Verwendung der __get()-Methode an wie folgt: 🎜rrreee🎜Ausgabeergebnis: 🎜🎜🎜Machen Sie sich in fünf Minuten mit den magischen Methoden in PHP vertraut (detaillierte Beispiele)🎜🎜Aus den obigen Ergebnissen ist ersichtlich, dass die Methode __get() automatisch aufgerufen wird, wenn ein Klassenattribut aufgerufen oder abgerufen wird, das in der aktuellen Umgebung undefiniert oder unsichtbar ist. 🎜🎜<strong><span style="max-width:90%">__isset()</span></strong><strong><span style="font-size: 18px;">__isset()</span></strong>Methode🎜🎜Die spezifische Bedingung für den automatischen Aufruf der __isset()-Methode ist, wenn isset() außerhalb der Klasse für eine Eigenschaft verwendet wird, auf die nicht zugegriffen werden kann oder nicht Wenn in der Klasse oder der Funktion empty() vorhanden ist, lautet das Syntaxformat dieser Methode wie folgt: 🎜🎜rrreee🎜Was wir beachten müssen, ist: 🎜🎜Der Parameter $name ist der Name von das Attribut, auf das zugegriffen werden soll. 🎜
  • 🎜isset() Funktion wird verwendet, um zu überprüfen, ob eine Variable existiert und bestimmt auch, ob sie nicht NULL ist wird übergeben. Gibt „true“ zurück, wenn die Variable existiert, und gibt „false“ zurück, wenn sie nicht existiert. 🎜
  • 🎜empty()Die Funktion wird verwendet, um zu prüfen, ob eine Variable leer ist. Wenn der Wert der Variablen gleich FALSE ist, wird davon ausgegangen, dass die Variable leer ist existieren. 🎜
  • 🎜Wenn Sie die Funktion isset() oder empty() verwenden möchten, um die privaten Attribute in der Klasse zu erkennen, müssen wir der Klasse nur eine __isset()-Methode hinzufügen () oder empty()-Funktion außerhalb der Klasse verwendet wird, wird die __isset()-Methode innerhalb der Klasse automatisch aufgerufen. 🎜
🎜Als nächstes schauen wir uns die Verwendung der __isset()-Methode anhand eines Beispiels an. Das Beispiel sieht wie folgt aus: 🎜🎜rrreee🎜Ausgabeergebnis: 🎜🎜🎜Machen Sie sich in fünf Minuten mit den magischen Methoden in PHP vertraut (detaillierte Beispiele)🎜🎜Worauf wir achten müssen, ist , property_exists() kann verwendet werden, um zu erkennen, ob die Eigenschaft in der Klasse definiert ist. Das Syntaxformat ist 🎜rrreee🎜, wobei $class_name der Klassenname in Form einer Zeichenfolge ist Das heißt, es wird festgestellt, ob das Attribut property_name in der Klasse class_name definiert ist. 🎜🎜<code><strong><span style="max-width:90%">__unset() </span></strong><strong><span style="font-size: 18px;">__unset() </span></strong>Methode🎜🎜Die spezifische Bedingung für den automatischen Aufruf der Methode __unset() ist, wenn die Funktion unset() außerhalb der Klasse für eine Eigenschaft verwendet wird, auf die nicht zugegriffen werden kann oder nicht in der Klasse vorhanden ist, lautet das Syntaxformat dieser Methode wie folgt: 🎜🎜
public function __unset($name){
    ... ... ;
}

其中我们需要注意的是:

  • 参数 $name 为要访问的属性名称。

  • unset() 函数的作用是删除指定的变量,需要传入一个或多个变量作为参数,另外,该函数没有返回值。

  • 可以使用 unset() 函数在类外部去删除类中的成员属性。如果要删除类中的公有属性的话直接使用 unset() 函数即可;

  • 如果要删除类中的私有属性的话,则需要在类中添加一个 __unset() 方法。

接下来我们通过实例来看一下__unset()方法的使用,实例如下:

<?php
    class father{
        public $name = &#39;http://c.biancheng.net/php/&#39;;
        private $study = &#39;C语言中文网&#39;;
        public function __unset($study){
            if(property_exists(&#39;father&#39;, $study)){
                unset($this->$study);
                echo &#39;移除成员属性:“&#39;.$study.&#39;”成功!<br>&#39;;
            }else{
                echo &#39;成员属性:“&#39;.$study.&#39;”不存在!<br>&#39;;
            }
        }
    }
    $object = new father();
    unset($object->name);
    unset($object->study);
    unset($object->study1);
?>

输出结果:

Machen Sie sich in fünf Minuten mit den magischen Methoden in PHP vertraut (detaillierte Beispiele)

由上述实例看出当在类外部对类中不可访问或不存在的属性使用 unset() 函数时,__unset() 方法会被自动调用。

上述实例中给大家介绍了一些常用的魔术方法,但这并不是魔术方法的全部,那接下来再给大家列举一些魔术方法:

  • __call()  --- 调用一个不存在的方法时自动调用   

  • __sleep()  ---  使用 serialize 序列化时自动调用    

  • __toString() ---   把对象转换成字符串时自动调用   

  • __invoke()  ---  当尝试把对象当方法调用时自动调用

  • __wakeup()  ---  使用 unserialize 反序列化时自动调用    

  • __callStatic()  ---  调用一个不存在的静态方法时自动调用    

  • __debugInfo()  ---  使用 var_dump() 打印对象信息时自动调用 

  • __set_state()  ---  当使用 var_export() 函数时自动调用,接受一个数组参数    

大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。

Das obige ist der detaillierte Inhalt vonMachen Sie sich in fünf Minuten mit den magischen Methoden in PHP vertraut (detaillierte Beispiele). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn