2011-11-16 14 views
1

以下は、同じクラスのメソッドに基づいて$user->privilegeを割り当てるコードを抜粋したものです。それは過度に繰り返されているようで、私は見ているコードでこの種の繰り返しをあまり見ていないことを考えれば、私はそれをより読みやすくするために何かできるかどうか疑問に思っています。PHPで呼び出す反復クラス(メソッド/プロパティ)

$user -> privileges = $user -> get_privileges ($user -> username); 
+3

なぜアクセス可能な関数の結果を保存するのですか?矛盾するまで自分自身を開いている!また、 '$ user-> username'を' get_privileges() 'の省略時のパラメータとして設定して、省略できるようにしてください。 – Brad

+0

ええ、私はそのアイデアがはるかに良い。 –

答えて

2

私には特に反復的に見えませんが、クラスの外のメソッドに基づいてオブジェクトのプロパティを割り当てるのは少し珍しいことです。その代わり、これは、より良いコーディングするときにプロパティを設定することを忘れないようにする必要がなくなり、オブジェクトコンストラクタの内部で処理されることがあります

class User { 
    public $username; 
    public $privileges; 

    public function __construct() { 
     // setup the user however that's done... 

     // And assign privileges in the constructor 
     $this->privileges = $this->get_privileges(); 
    } 

    // In get_privilegs, rather than passing the username property, 
    // just access it via $this->username. 
    // Unless you need to use this method from time to time outside the class, it can be private 
    private function get_privileges() { 
     // Get privs for $this->username 
    } 
} 

をコンストラクタで呼び出さ$this->privileges = $this->get_privileges();に代わるものとして、あなただけの内部$this->privilegesを設定することもできますget_privileges()メソッド。次に、コンストラクタに$this->get_privileges()という名前を付けるだけで、割り当ては必要ありません。どちらの方法でも動作します。

方法は高価であり、私は要求の残りの結果を格納することができたときに、私はこのパターンをたくさん使う
+0

OOPの新人として、コンストラクタはまだループのために私を投げます。私はあなたの助けを感謝します:) –

+0

@DươngVăn多くの便利な作業をオブジェクトコンストラクタで行うことができます。 –

+0

2番目の方法は、コンストラクタで動作しないように見える$ __ COOKIESから値を取得しているので、よりうまくいくようです。 –

0

class User { 
    protected $_privileges = null; 

    public function getPrivileges() { 
     if ($this->_privileges == null) { 
      // code to populate privileges array 
      $this->_privileges = $privileges; 
     } 

     return $this->_privileges; 
    } 
} 

その方法GETPRIVILEGESは()一度だけ、その後のハードワークを行いますそのオブジェクトインスタンスの残りの要求に対して、ローカルにキャッシュされた独自のコピーを使用します。

関連する問題