以下は、同じクラスのメソッドに基づいて$user->privilege
を割り当てるコードを抜粋したものです。それは過度に繰り返されているようで、私は見ているコードでこの種の繰り返しをあまり見ていないことを考えれば、私はそれをより読みやすくするために何かできるかどうか疑問に思っています。PHPで呼び出す反復クラス(メソッド/プロパティ)
$user -> privileges = $user -> get_privileges ($user -> username);
以下は、同じクラスのメソッドに基づいて$user->privilege
を割り当てるコードを抜粋したものです。それは過度に繰り返されているようで、私は見ているコードでこの種の繰り返しをあまり見ていないことを考えれば、私はそれをより読みやすくするために何かできるかどうか疑問に思っています。PHPで呼び出す反復クラス(メソッド/プロパティ)
$user -> privileges = $user -> get_privileges ($user -> username);
私には特に反復的に見えませんが、クラスの外のメソッドに基づいてオブジェクトのプロパティを割り当てるのは少し珍しいことです。その代わり、これは、より良いコーディングするときにプロパティを設定することを忘れないようにする必要がなくなり、オブジェクトコンストラクタの内部で処理されることがあります
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()
という名前を付けるだけで、割り当ては必要ありません。どちらの方法でも動作します。
OOPの新人として、コンストラクタはまだループのために私を投げます。私はあなたの助けを感謝します:) –
@DươngVăn多くの便利な作業をオブジェクトコンストラクタで行うことができます。 –
2番目の方法は、コンストラクタで動作しないように見える$ __ COOKIESから値を取得しているので、よりうまくいくようです。 –
:
class User {
protected $_privileges = null;
public function getPrivileges() {
if ($this->_privileges == null) {
// code to populate privileges array
$this->_privileges = $privileges;
}
return $this->_privileges;
}
}
その方法GETPRIVILEGESは()一度だけ、その後のハードワークを行いますそのオブジェクトインスタンスの残りの要求に対して、ローカルにキャッシュされた独自のコピーを使用します。
なぜアクセス可能な関数の結果を保存するのですか?矛盾するまで自分自身を開いている!また、 '$ user-> username'を' get_privileges() 'の省略時のパラメータとして設定して、省略できるようにしてください。 – Brad
ええ、私はそのアイデアがはるかに良い。 –