PHP - instanceof v === null

时间:2012-05-19 22:46:15

标签: php zend-framework

在初始化php中的对象之前,使用instanceof而不是=== null是否有特定的好处。

我在Zend框架中一直看到这样的代码:

if (!self::$_httpClient instanceof Zend_Http_Client) {
        /**
         * @see Zend_Http_Client
         */
        #require_once 'Zend/Http/Client.php';
        self::$_httpClient = new Zend_Http_Client();
    }

    return self::$_httpClient;

但是该属性不能在外部设置,因此在设置

之前将为null

4 个答案:

答案 0 :(得分:3)

如果您绝对希望self :: $ _ httpClient成为Zend_Http_Client而不是其他任何内容,则检查更加确定。

虽然良好的编程可能会阻止它成为其他任何东西,但如果该变量要成为String,int或另一个对象的实例,则会更正检查null的情况。

答案 1 :(得分:2)

它是正确的你可以使用你的解决方案和“===”然后你无法检查实例是否真的是一个“Zend_Http_Client”的实例也许你调用另一个类到$ _httpClient然后它不是NULL而它不是工作

在我看来,最好使用php的内部功能来检查这些事情。

答案 2 :(得分:1)

这看起来像是一个单例实现。如果这是真的,那么这个检查没有充分的理由 - 检查null会更好,更合乎逻辑。

答案 3 :(得分:0)

您几乎可以扩展ZF中的任何类。因此,您永远无法确定子类不会用不同的实现替换setHttpClient()。此外,您无法确定有人不想使用自己的HTTP客户端实现。使用此代码,您可以立即检查两者。如果它为null则有效。此外,当它是一个不扩展Zend_Http_Client的类时,它也可以工作。