Maison  >  Article  >  développement back-end  >  Explication détaillée de l'instance de la méthode magique __get() (tutoriel php avancé orienté objet 2)

Explication détaillée de l'instance de la méthode magique __get() (tutoriel php avancé orienté objet 2)

巴扎黑
巴扎黑original
2017-04-18 18:02:272123parcourir

Quand vous voyez ce nom, cela vous donne une sensation très haut de gamme. Oui, les méthodes magiques sont effectivement avancées.

Alors, c'est quoi une méthode magique ?

Les méthodes commençant par deux traits de soulignement en PHP sont appelées "Méthodes magiques". Par exemple, les __construct(), __destruct(), __clone() mentionnés précédemment et __call(),,__get(), __set(),__sleep(), __wakeup(), __toString(), __autoload(), etc. , Ce sont toutes des méthodes magiques.

Si vous souhaitez que PHP appelle ces méthodes magiques, vous devez d'abord les définir dans la classe, sinon PHP n'exécutera pas les méthodes magiques non créées.

Remarque :

La méthode magique est définie en PHP, vous ne pouvez donc pas la créer vous-même. Vous ne pouvez utiliser que ce qui existe déjà en PHP, sinon une erreur sera signalée.

Nous allons maintenant présenter les méthodes magiques couramment utilisées parmi de nombreuses méthodes magiques.

__get() fonctionne comme :

__get() : Lors de la lecture de la valeur d'un attribut inaccessible (privé, protégé, n'existe pas), php exécutera __get () méthode.

Jetons un coup d'œil à un exemple sur __get() :

<?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();

L'exemple ci-dessus est la connaissance des classes dont nous avons parlé précédemment, la création de classes, la création de méthodes et l'instanciation . Dernière visite.

Maintenant, nous proposons une nouvelle exigence, c'est-à-dire que nous devons appeler $food directement à l'extérieur de la classe. Alors certains diront que $food est un attribut protégé et ne peut pas être appelé directement. Mais la demande est de faire cela, que devons-nous faire ? C'est à ce moment-là que notre méthode magique __get() est utilisée. Regardez le code suivant :

<?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;

Avant d'utiliser la méthode magique, nous devons d'abord déterminer si $pro_name existe. Parce que dans l'exemple ci-dessus, $pro_name appelle food, et food existe, donc on peut l'appeler. Mais si la nourriture est remplacée par quelque chose d'autre qui n'existe pas, comme a, alors la méthode __get() sera appelée, mais une erreur sera signalée indiquant que a n'existe pas. Nous devons donc d’abord porter un jugement.

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