以下是我编写的一些代码的摘录,这些代码基于同一个类的方法分配$user->privilege
。它似乎过于重复,我想知道是否有一些我可以做的事情来使它更具可读性 - 因为我没有在我看过的代码中看到过这种重复。
$user -> privileges = $user -> get_privileges ( $user -> username );
答案 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()
,不需要任何分配。无论哪种方式都有效。
答案 1 :(得分: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()只会执行一次艰苦的工作,之后它会使用自己的本地缓存副本来处理该对象实例的剩余请求。