この名前を見ると、とても高級感を感じます。はい、魔法の方法は確かに進歩しています。
それで、魔法の方法とは何ですか?
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 '<br/>我是' . $this->name . '我喜欢吃' . $this->food; } } $monkey = new Monkey('猴子' , '桃子') $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 '<br/>我是' . $this->name . '我喜欢吃' . $this->food; } //魔术方法 function __get($pro_name){ //先判断$pro_name是否存在 if(isset($this -> $pro_name)){ return $this -> $pro_name; }else{ echo '属性值不存在'; } } } $monkey = new Monkey('猴子' , '桃子') $monkey -> sayHello(); echo '猴子喜欢吃' . $monkey -> food;
マジック メソッドを使用する前に、まず $pro_name が存在するかどうかを確認する必要があります。なぜなら、上記の例では $pro_name が food を呼び出しており、food が存在するので呼び出すことができるからです。ただし、食べ物が存在しないもの (a など) に置き換えられた場合、 __get() メソッドが呼び出されますが、 a が存在しないというエラーが報告されます。したがって、最初に判断を下す必要があります。
以上がマジックメソッド __get() インスタンスの詳細説明 (php 上級オブジェクト指向チュートリアル 2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。