我可以在类方法中使用static关键字吗?它有什么后果?

时间:2015-11-22 00:25:15

标签: php oop

class Foo {

  private $items;

public function getItems() {
  static $loaded = FALSE;

  if (isset($this->items) && $loaded) {
     return $this->items;
  } else if ($loader = $this->getLoader()) {
    //logic for fetching items from other source;
    $this->loaded = TRUE;
  } else {
    $this->items = array();
  }

  return $this->items;
}

}

使用静态变量或更好地引入类属性是否有效? 是否为每个类实例共享$ loaded? (例如:类静态变量)?

1 个答案:

答案 0 :(得分:1)

方法" getItems()"是一种常规方法,除非创建类,否则无法调用。如果创建了类,则调用" getItems()"静态变量" $ loaded"设置为false,并且您的第一个if语句始终计算为false。因为静态是在" getItems()"中定义的。方法没有其他方法来检查该值。 所以基本上这是一个关于如何使用静态变量的非常糟糕的例子。

我确定你知道它们保留了它们的值,即使这个类被破坏了,但是这样的检查应该更好地放在__construct方法中,并且在类范围中定义静态。通过这种方式,您可以始终验证该类是否已经启动,即使该类尚未创建或使用它来检查它是否以不同的方法加载。

但要回答你的问题,是的,你可以。它们甚至可以放在正常的功能中。