__get()
の唯一の利点は、コードが少なくなる可能性がありますが、必ずしもそうであるとは限りません。たとえば、プライベートメンバーが10人で、ゲッターに5を表示させたい場合は、__get()
と書かなければなりません。そうすれば偽りの目に見えるメンバーの1人が呼び出されると、それを送信できます。そうでなければ、そうでなければ__get()
せずに自然に来る(エラーを発行したり、実際に有用ではないかもしれないnull
などの値を返す。
私は全く一般的にはゲッターとセッターを使用することを提案している人をexcoriateしなければならない。これは通常のいずれかアーキテクチャに問題があることを示し、例えば、次の二つのコードブロック間の概念的な違いを説明:。
class _ {
private $_;
public function get_() {
return $this->_;
}
}
class _ {
public $_;
}
対はdiffereがありませんnce。
しかし、多くの人がgetterを使う利点は、何らかの方法で戻り値を変更して受信者に役立てることができるということです。しかし、私たちは建築の問題に戻ります。何らかの理由でクラスの内容を公開する必要はありません。代わりに、クラスにアクションを実行するように指示する必要があります(アクションの状態によって異なる場合があります)。ゲッターを使用すると、一般に、クラスの状態を照会し、その状態に基づいて外部的にアクションを実行することができます。
私は__set()
とセッターに対して本質的に同じ引数を持っていますが、__set()
はあなたが行うことができますことを1つの素敵なものがある:
class _ {
private $_ = array();
public function __set($key, $val) {
$this->_[$key] = $val;
}
}
これは、あなたが$_obj->key = 'val'
非常に素晴らしいを入力することができますが。これと大きな違いはなく、キーと値をとり、同じことをするadd()
のような別のメソッドを追加することに注意してください。私はオブジェクトセッターの表記を好むだけです。
私はそれが便利だと感じることがありますが、私は他の理由で他の人に答えさせるでしょう。私は、__get/__ setを使用すると、はるかに遅い...約10倍多くのことを指摘します。私はなぜこれが自分自身でベンチマークされたのかわかりませんが、PHPのサイトには書かれています。 – Brad
より一般的な「なぜプロパティーですか?」については、http://programmers.stackexchange.com/questions/62383/what-is-the-point-of-propertiesを参照してください。質問。 – delnan