0

我看到自己经常这样做:

function getTheProperty()
{
    if (! isset($this->theproperty)) {
       $property = // logic to initialise thepropery
       $this->theproperty = $property;
    }
    return $this->theproperty;
}

这很好,因为它避免了用于初始化值的复杂逻辑。但是,据我所知,不利的一面是我无法准确确定客户将如何使用它,这可能会令人困惑。

这是一个很好的模式吗?这样做时应该考虑什么?

添加一个参数如何 - 例如 $forceNew 绕过记忆?

4

1 回答 1

0

魔法方法。就像是:

Class MyMagic {

  private $initinfo = array(
    'foo' => array('someFunction', array('arg1', 'arg2'))
    'bar' => array(array($this, 'memberFunction'), array('arg3'))
  );

  public function __get($name) {
    if( ! isset($this->$name) ) {
      if( isset($this->initinfo[$name]) ) {
        $this->$name = call_user_func_array(initinfo[$name][0], initinfo[$name][1]);
      } else {
        throw new Exception('Property ' . $name . 'is not defined.');
      }
    } else {
      return $this->$name;
    }
  }

}

$magic = new MyMagic();
echo $magic->foo; //echoes the return of: someFunction('arg1', 'arg2')
echo $magic->bar; //echoes the return of: $this->memberFunction('arg3')
于 2013-10-08T20:21:42.730 回答