ホームページ  >  記事  >  バックエンド開発  >  マジックメソッド __get() インスタンスの詳細説明 (php 上級オブジェクト指向チュートリアル 2)

マジックメソッド __get() インスタンスの詳細説明 (php 上級オブジェクト指向チュートリアル 2)

巴扎黑
巴扎黑オリジナル
2017-04-18 18:02:272066ブラウズ

この名前を見ると、とても高級感を感じます。はい、魔法の方法は確かに進歩しています。

それで、魔法の方法とは何ですか?

PHPでは2つのアンダースコアで始まるメソッドを「マジックメソッド」と呼びます。たとえば、前述の __construct()、__destruct ()、__clone()、__call()、__get()、__set()、__sleep()、__wakeup()、__toString()、__autoload() などです。 , どれも魔法の方法です。

PHP でこれらのマジック メソッドを呼び出したい場合は、まずクラス内で定義する必要があります。そうしないと、PHP は作成されていないマジック メソッドを実行しません。

注:

マジックメソッドはphpで設定されているため、自分で作成することはできません。phpにすでに存在するもののみを使用できます。それ以外の場合は、エラーが報告されます。

それでは、数ある魔法の方法の中から、よく使われる魔法の方法を紹介していきます。

__get() の機能は次のとおりです:

__get(): アクセスできない属性 (private、protected、存在しない) の値を読み取るとき、PHP は __get() メソッドを実行します。

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

上記の例は、クラス、クラスの作成、メソッドの作成、インスタンス化、そして最終的にアクセスについて以前に説明した知識です。

ここで、新しい要件を提案します。つまり、クラスの外で $food を直接呼び出す必要があります。その場合、$food は保護された属性であり、直接呼び出すことはできないと言う人もいるでしょう。しかし、需要はこれを行うことです。どうすればよいでしょうか?これは、マジック メソッド __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;
}
//魔术方法
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;

マジック メソッドを使用する前に、まず $pro_name が存在するかどうかを確認する必要があります。なぜなら、上記の例では $pro_name が food を呼び出しており、food が存在するので呼び出すことができるからです。ただし、食べ物が存在しないもの (a など) に置き換えられた場合、 __get() メソッドが呼び出されますが、 a が存在しないというエラーが報告されます。したがって、最初に判断を下す必要があります。

以上がマジックメソッド __get() インスタンスの詳細説明 (php 上級オブジェクト指向チュートリアル 2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。