2016-05-22 2 views
2

私はPHPでクラスを持っており、私のコンストラクタでこれらのプライベート変数を設定する方法があるかどうかを知りたいと思っています。PHPでクラス変数を設定するには?

setterまたはthisに設定する必要がありますか?

class foo { 

    private $bar; 

    public function __construct($foobar) { 
    $this->bar = $foobar; 
    } 

    public function setBar($bar) { 
    $this->bar = $bar; 
    } 

    public function getBar() { 
    return $this->bar; 
    } 
} 

OR

class foo { 

    private $bar; 

    public function __construct($foobar) { 
    $this->setBar($foobar); 
    } 

    public function setBar($bar) { 
    $this->bar = $bar; 
    } 

    public function getBar() { 
    return $this->bar; 
    } 
} 

それとも私の質問は単なる哲学的なのですか? gettersと同じ質問ができます。しかし、親クラスのプライベート変数を扱うときは、settersgettersを使う必要があると思います。

+2

getterとsetterは文字通り何もしませんが、制限なしで変数を取得/設定するので、 'public'にして直接変更することもできます; –

+0

良い点。だから、 'setters'と' getters'を使うだけで、他の何かをしたいときにだけ使うことができます。 – Jurik

+1

@NiettheDarkAbsol - 私は同意しません。 1)すべてのものをオブジェクトのための方法にする - 混乱を避ける2)将来計算されるべきものは何か? http://programmers.stackexchange.com/questions/176876/why-shouldnt-i-be-using-public-variables-in-my-java-class –

答えて

2

データの検証と将来のメンテナンスのために、コンストラクターでsetBarを使用してください。

// a developer introduces a bug because the string has padding. 
$foo->setBar("chickens "); 

// the developer fixes the bug by updating the setBar setter 
public function setBar($bar) { 
    $this->bar = trim($bar); 
} 

// the developer doesn't see this far away code 
$f = new foo("chickens "); 

開発者は、彼がバグを修正したと考えてコードを生産に送ります。

1

このような簡単な例では、はい、あなたの質問は主に哲学的です! :) しかし、あなたのセッターがいくつかの特別なアクション(入力の妥当性をチェックする、または変更するなど)を行う場合は、2番目のスキームを使用することをお勧めします。

+0

を参照してください。それは良い点です - セッターは入力を検証しますか? – Jurik

+1

あまりにも良い点!まあ、 "入力"によって、私は実際には、ユーザーの入力ではなく、関数の引数を意味しました。一般的に言えば、ユーザーの入力を個別に検証することをお勧めします。しかし、単純なアプリケーションでは、常にベストプラクティスをすべて実行する必要はありません。すべては常にあなたのニーズに依存します。 – Abrab

1

この:

class foo { 

    private $bar; 

    public function __construct($foobar) { 
    $this->bar = $foobar; 
    } 

    public function setBar($bar) { 
    $this->bar = $bar; 
    } 

    public function getBar() { 
    return $this->bar; 
    } 
} 

がこれよりも違いはありません:あなたが唯一の変数に許可した場合、ゲッターとセッターを使用する

クラスのfoo {

public function __construct($bar){ 
    $this->bar = $bar; 
} 

public $bar; 

一つの理由は、次のようにオブジェクトの構築時に設定してください。

class foo { 

    private $bar; 

    public function __construct($foobar) { 
    $this->bar = $foobar; 
    } 


    public function getBar() { 
    return $this->bar; 
    } 
} 

ゲッターとセッターを必要以上に使用しないでください。

関連する問題