【问题标题】:!isset vs == null PHP, Singleton Class!isset vs == null PHP,单例类
【发布时间】:2013-02-23 22:17:47
【问题描述】:

我想知道的问题可能更多是风格问题或您有什么问题。我在 PHP 中有一个单例类。当我检查对象是否已经创建时,我只是这样做:

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

但是,我已经看到了一些 PHP 中单例模式的实现 !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;
}

【问题讨论】:

    标签: php null singleton isset


    【解决方案1】:

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

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

    【讨论】:

    • 我个人更喜欢 null 检查,但在我看来使用 == 而不是 === 似乎很草率——即使再一次,也不会有功能差异。
    • @Jon 在这种情况下没有区别,但我同意== null 让我很不爽。这可能是因为松散的相等检查与!self::$instance 没有什么不同。当然,!self::$instance 是另一种同样有效的方法。
    【解决方案2】:

    第一个不好;如果 $instance 不存在就会出错!

    【讨论】:

    • 那么在这种情况下,$instance 在之前的代码中被定义为 null。让我告诉你我有什么: private static $instance = null;私有函数 __construct() { } 公共静态函数 getInstance() { if(self::$instance == null) { self::$instance = new self(); } 返回 $ 实例; } 那么你还推荐 !isset 吗?
    • 好吧,你为什么不这么说?
    【解决方案3】:

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

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

    我会这样写:

    public static function getInstance() {
        return is_null(self::$instance) ? new self() : self::$instance;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2013-12-18
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 2010-11-17
      • 2015-03-10
      相关资源
      最近更新 更多