2

在 php.ini 中初始化对象之前使用 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;

但是该属性不能在外部设置,因此在设置之前将为空

4

4 回答 4

3

如果您绝对希望 self::$_httpClient 成为 Zend_Http_Client 而不是其他任何东西,那么检查会更加明确。

尽管良好的编程可能会阻止它成为其他任何东西,但如果变量要成为 String、int 或另一个对象的实例,它将在检查 null 的情况下得到纠正。

于 2012-05-19T22:51:20.570 回答
2

它是正确的,你可以用你的解决方案和“===”来做,但是你不能检查这个实例是否真的是“Zend_Http_Client”的一个实例,也许你调用另一个类到 $_httpClient 然后它不是 NULL 并且它不工作。

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

于 2012-05-19T22:50:29.960 回答
1

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

于 2012-05-19T22:48:33.063 回答
0

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

于 2012-05-20T14:36:15.683 回答