Heim > Backend-Entwicklung > PHP-Tutorial > Ausführliche Erklärung der Instanz der magischen Methode __get() (PHP-Tutorial für fortgeschrittene Objekte 2)

Ausführliche Erklärung der Instanz der magischen Methode __get() (PHP-Tutorial für fortgeschrittene Objekte 2)

巴扎黑
Freigeben: 2023-03-07 14:46:01
Original
2144 Leute haben es durchsucht

Wenn Sie diesen Namen sehen, vermittelt er Ihnen ein sehr hochwertiges Gefühl. Ja, magische Methoden sind tatsächlich fortgeschritten.

Also, was ist eine magische Methode?

Methoden, die in PHP mit zwei Unterstrichen beginnen, werden „Magic-Methoden“ genannt. Zum Beispiel die zuvor erwähnten __construct(), __destruct(), __clone() und __call(),,__get(), __set(),__sleep(), __wakeup(), __toString(), __autoload() usw. , Das sind alles magische Methoden.

Wenn Sie möchten, dass PHP diese magischen Methoden aufruft, müssen Sie sie zuerst in der Klasse definieren, andernfalls führt PHP nicht erstellte magische Methoden nicht aus.

Hinweis:

Die Magic-Methode ist in PHP festgelegt, sodass Sie sie nicht selbst erstellen können. Sie können nur das verwenden, was bereits in PHP vorhanden ist, andernfalls wird ein Fehler gemeldet.

Im Folgenden stellen wir unter vielen Zaubermethoden die am häufigsten verwendeten Zaubermethoden vor.

__get() funktioniert wie folgt:

__get(): Beim Lesen des Werts eines unzugänglichen Attributs (privat, geschützt, nicht vorhanden) führt PHP __get aus ()-Methode.

Schauen wir uns ein Beispiel zu __get() an:

<?php
class Monkey{
public $name;
protected $food;
function __construct($name,$food){
$this->name = $name;
$this->food = $food;
}
function sayHello(){
echo &#39;<br/>我是&#39; . $this->name . &#39;我喜欢吃&#39; . $this->food;
}
}
$monkey = new Monkey(&#39;猴子&#39; , &#39;桃子&#39;)
$monkey -> sayHello();
Nach dem Login kopieren

Das obige Beispiel ist das Wissen über Klassen, über die wir zuvor gesprochen haben, das Erstellen von Klassen, das Erstellen von Methoden und das Instanziieren . Zuletzt besucht.

Jetzt stellen wir eine neue Anforderung vor, das heißt, wir müssen $food direkt außerhalb der Klasse aufrufen. Dann werden einige Leute sagen, dass $food ein geschütztes Attribut ist und nicht direkt aufgerufen werden kann. Aber die Forderung besteht darin, dies zu tun. Was sollen wir tun? Hier kommt unsere magische Methode __get() zum Einsatz. Schauen Sie sich den folgenden Code an:

<?php
class Monkey{
public $name;
protected $food;
function __construct($name,$food){
$this->name = $name;
$this->food = $food;
}
function sayHello(){
echo &#39;<br/>我是&#39; . $this->name . &#39;我喜欢吃&#39; . $this->food;
}
//魔术方法
function __get($pro_name){
//先判断$pro_name是否存在
if(isset($this -> $pro_name)){
return $this -> $pro_name;
}else{
echo &#39;属性值不存在&#39;;
}
}
}
$monkey = new Monkey(&#39;猴子&#39; , &#39;桃子&#39;)
$monkey -> sayHello();
echo &#39;猴子喜欢吃&#39; . $monkey -> food;
Nach dem Login kopieren

Bevor wir die magische Methode verwenden, müssen wir zunächst feststellen, ob $pro_name vorhanden ist. Denn im obigen Beispiel ruft $pro_name food auf und food existiert, sodass es aufgerufen werden kann. Wenn jedoch Lebensmittel durch etwas anderes ersetzt werden, das nicht existiert, z. B. a, wird die Methode __get() aufgerufen, es wird jedoch ein Fehler gemeldet, der besagt, dass a nicht existiert. Daher müssen wir zunächst ein Urteil fällen.

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung der Instanz der magischen Methode __get() (PHP-Tutorial für fortgeschrittene Objekte 2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage