2

私の技術書にそう書かれていたので、それが本当かどうか疑問に思っています。たとえば、次のようになります。

class A {
    public $attr = "hmm";
}

$a = new A();
echo $a->attr; // outputs hmm

それは私にとってはうまくいきます。この本は、クラスの外でそれを使用するために、__get関数を作成していないと言っています。私は少し混乱しています。

4

3 に答える 3

3

その魔法のメソッドを使用する例を次に示します__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) プロパティはそのように簡単にアクセスでき、同時に書き換えることはできません。また、プロパティにアクセスするときに何でもログに記録できます。

悪い理由: プロパティが存在するかどうかをチェックし、存在しない場合はそのメソッドを呼び出すため、パフォーマンスが大幅に低下します。

于 2013-06-22T08:46:32.930 に答える