私の技術書にそう書かれていたので、それが本当かどうか疑問に思っています。たとえば、次のようになります。
class A {
public $attr = "hmm";
}
$a = new A();
echo $a->attr; // outputs hmm
それは私にとってはうまくいきます。この本は、クラスの外でそれを使用するために、__get関数を作成していないと言っています。私は少し混乱しています。
私の技術書にそう書かれていたので、それが本当かどうか疑問に思っています。たとえば、次のようになります。
class A {
public $attr = "hmm";
}
$a = new A();
echo $a->attr; // outputs hmm
それは私にとってはうまくいきます。この本は、クラスの外でそれを使用するために、__get関数を作成していないと言っています。私は少し混乱しています。
その魔法のメソッドを使用する例を次に示します__get
。
class User {
private $data = array(
"name" => "Joe",
"age" => "10",
"phrase" => "Hell Yeah"
) ;
public function __get($name){
return (isset($this->data[$name)) ? $this->data[$name] : null ;
}
}
$user = new User() ;
echo $user->age ; //Access the property.
$user->age = 5 ; //Will not be possible, does not exist. But you can define __set
優れている理由:
いわゆるread only
プロパティを提供します。たとえば、オブジェクトmysqli_result
にはそのようなものがあります。( $result->num_rows
) プロパティはそのように簡単にアクセスでき、同時に書き換えることはできません。また、プロパティにアクセスするときに何でもログに記録できます。
悪い理由: プロパティが存在するかどうかをチェックし、存在しない場合はそのメソッドを呼び出すため、パフォーマンスが大幅に低下します。