2012-02-07 2 views
0

セッターから間違ったOOP POV(セッターチェーニング用)の$thisが返されていますか?これをセッターから返すのは間違っているOOP POV?

class Person 
{ 

    protected $firstName, $lastName; 

    public function __construct($first = null, $last = null) 
    { 
     $this->firstName = $first; 
     $this->lastName = $last; 

    } 

    public function setFirstName($first) 
    { 
     $this->firstName = $first; 
     return $this; 
    } 

    public function setLastName($last) 
    { 
     $this->lastName = $last; 
     return $this; 
    } 
} 

$p = new Person(); 
$p->setFirstName('John')->setLastName('Smith'); 

答えて

1

私はそれは悪い習慣ではありません、Zendフレームワークはそれを使用しています(そして、私はそれがPHPが提供するほとんどのものを利用するPHPコードの大きな部分だと考えています)。 Here's a nice articleに例を示します。

それはあなたが変数に繰り返しアクセスすることなく、単純化されたコードを記述することができますし、より良いで読み取り可能なコードが問題で何をするか..です

オブジェクト(PHP5で)常にそれがどんなオーバーヘッドをもたらすべきではありませんので、参照として返されます。

とにかく、すべての機能をpublic function &setFirstName($first)に再宣言して、次回の呼び出しでオブジェクト自体を書き換えたいことを明示しますが、必ずしも必要ではありません。参照ここでは説明しています

EDIT何references are(も読んだ彼らは、何彼らはありません)と機能からreturn reference方法。前に述べたように、関数名の前に&を追加する必要はありませんが、それを明確にする(明示的に)、"オブジェクト参照を処理したい"というPHP 5 "works with object as reference by default"

+0

偉大な答え。あなたの最後のヒントについての説明が必要です(&を使用することについて)... – gremo

+0

@Gremoは編集を読みます。) – Vyktor

1

これは、コーディング中に「ユーザビリティ」を提供する一般的な方法です。私はこのプロジェクトを一貫して行うことを好む、あるいはまったくやりません。それ以外の場合は混乱するかもしれません。

関連する問題