0

我想知道的问题可能更多是风格问题或你有什么问题。我在 PHP 中有一个单例类。当我检查对象是否已创建时,我只需执行以下操作:

if(self::$instance == null)
  self::$instance = new self();

但是,我在 PHP 中看到了一些单例模式的实现 do !isset:

if(!isset(self::$instance))
  self::$instance = new self();

根据我的理解,这两个语句在功能上没有区别。一种方式比另一种更好吗?一种方式比另一种方式更专业吗?

编辑:

这是我的单例类中整个模式的代码:

private static $instance = null;

private function __construct() {    }

public static function getInstance() {
    if(self::$instance == null) {
        self::$instance = new self();
    }
        return $instance;
}
4

3 回答 3

1

如果您已将instance其定义为受保护/私有静态变量,它们在功能上是相同的,您使用哪一个并不重要。

就个人而言,我认为isset它更符合 PHP 的精神,而 == NULL 更接近于 Java,但这是一个风格问题。

于 2013-02-23T22:20:30.600 回答
0

isset()当您不确定变量是否存在时使用。在您的情况下,变量始终存在。你也可以这样写:

if(is_null(self::$instance))
  self::$instance = new self();

我会这样写:

public static function getInstance() {
    return is_null(self::$instance) ? new self() : self::$instance;
}
于 2013-02-23T22:27:52.323 回答
0

第一个不好;如果 $instance 不存在,那将是错误的!

于 2013-02-23T22:19:32.013 回答