在PHP中调用的重复类(方法/属性)

时间:2011-11-16 03:02:12

标签: php oop class

以下是我编写的一些代码的摘录,这些代码基于同一个类的方法分配$user->privilege。它似乎过于重复,我想知道是否有一些我可以做的事情来使它更具可读性 - 因为我没有在我看过的代码中看到过这种重复。

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

2 个答案:

答案 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()只会执行一次艰苦的工作,之后它会使用自己的本地缓存副本来处理该对象实例的剩余请求。