PHP将字符串初始化为布尔值

4

我习惯于在PHP中将变量初始化为false,然后稍后再应用任何(字符串、布尔值、浮点数)值。

你认为哪种方法更好?

$name = false;
if (condition == true) {
    $name = $something_else;
}

if ($name) {  …do something…  }

vs.

$name ='';
if (condition == true) {
    $name = $something_else;
}

if (!empty($name)) {  …do something…  }

你认为哪种方法可以提供更好的性能?你会使用哪种方法?

4
这个问题属于Stacks的CodeReview网站。 - Suresh Kamrushi
我觉得你应该改变你的习惯。如果你想要将它们初始化为某些内容,就把它们初始化为nullFalse实际上是有意义的值,在这里可能会引起问题。这只是我的看法,如果有冒犯之处,请多多包涵。 - Damien Overeem
2
@sureshkamrushi 为什么?这个问题非常好,非常适合在SO上讨论。 - Sliq
1
我无法想象性能会有显著的差异。但是在语义上,null肯定比false更好。根据上下文,空字符串也可能是合适的。 - lonesomeday
1
永远不要在一个已经存在的变量上检查emptyPHP的isset和empty权威指南 - deceze
5个回答

5

乍一看 - $condition==true 是毫无意义的,因为 $condition 已经足够。

其次 - 如果你不确定变量的类型,但想初始化它(这确实是个好习惯),请使用 null - 因为 false 指向特定数据类型 - 布尔数据类型,而这是不正确的,读你代码的人可能会感到困惑。


3

空字符串''false都有意义。

建议使用null作为默认值。因为它实际上不应该有任何含义。

这也可以让你测试is_null($var)来确保某个东西实际上已经为你的变量设置了一个值。


嗯,null的意思是“以上都不是”、“没有值”或“什么也没有”... ;) - deceze

1

0

我认为将其赋予布尔值更好。当你比较在非常强大的系统上运行代码时,这不会有太大的区别。

但是,当涉及到系统性能时,一切都取决于您使用的数据类型的大小。布尔值使用1位数据。因此,它更方便使用,也更快。

除了其他答案之外,最好使用null。


0

我认为,无论你选择以上哪个,if语句的性能都取决于它的条件是否具有可预测的模式,即分支预测。如果条件始终为真或始终为假,即可预测,则处理器中的分支预测逻辑将捕捉到该模式。另一方面,如果处理器无法预测条件,则可能会影响性能。

谈到你的代码时,我能想到的优化代码是

  $name = false;// i dont think u should predeclare the 'name' variable 
   //as it is dependent on the if condition.so if the condition fails then
  //the $name will be   of no use. 
    if (condition) {
        $name = $something_else;
    }

    if ($name) //this condition will only be executed 
   // when $name is true so why predeclare $name.
    {  …do something…  
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接