在PHP中首先使用null有什么好处吗?

时间:2011-08-31 17:45:05

标签: php syntax

  

可能重复:
  Why do some experienced programmers write comparisons with the value before the variable?

我对此很好奇:在我研究的大多数框架/开源项目中,我经常看到这样的代码...

<?php

if (null === self::$_instance) {
    self::$_instance = new self();
}

特别是这一行...

if (null === self::$_instance) {

为什么在null语句的第一个参数中使用if而不是相反?...

if (self::$_instance === null) {

我意识到可能没有性能提升或类似的东西。这只是一种偏好还是我忽略了某种编码标准?

5 个答案:

答案 0 :(得分:14)

它可以防止您意外地将值赋给变量,尤其是当仅使用松散类型比较(==)时:

if (self::$_instance = NULL) { … } // WHOOPS!, self::$_instance is now NULL

这种条件通常称为yoda conditions。性能方面没有区别,两种陈述都是等价的。

答案 1 :(得分:6)

这主要是为了防止意外分配:

if (self::$_instance = null) ... //oops!

答案 2 :(得分:4)

没有明显的性能差异。以这种方式编写表达式的通常好处是防御性编程。我们希望避免意外使用赋值而不是相等比较:

if (self::$_instance = null) { ...

Woops!

答案 3 :(得分:3)

这可以帮助您正确使用代码。

如果你这样做,你的代码将会起作用,但效果将远远超出你想要的范围:

if (self::$instance = null) {

条件将始终失败(因为=运算符返回值集,并且它是假的)但self::$instance现在将设置为null。这不是你想要的。

如果你这样做:

if (null = self::$instance) {

您的代码无法正常工作,因为您无法在作业的左侧使用null(或任何文字,如字符串或整数)。只有变量可以是=运算符的左侧。

因此,如果您将==错误地输入为=,则会出现解析错误,并且您的代码完全不起作用。这比一个神秘且难以追踪的错误更可取。

答案 4 :(得分:0)

null并不特别 - 我看到很多程序员喜欢这样写出他们的表达方式:

if(8 == 4 * 2) {

这只是一种人们认为更清晰的偏好。