使用分配而不是平等 - 好的还是坏的做法?

时间:2013-04-07 18:54:09

标签: php coding-style

我知道while-condition子句中的以下赋值将起作用:

while ($info=mysql_fetch_array($data_jurisdiction))
{
//some stuff
}

$info被赋予一些值,而while条件将循环,除非赋值的右侧返回FALSENULL0,{{1}等等。

问题:在语言语法需要进行相等检查的情况下进行赋值是好还是坏? Zend Studio立即指出这是一个警告。每种方法的优缺点是什么?

3 个答案:

答案 0 :(得分:0)

它常常令人不悦,因为它会混淆潜在的问题,而且除了你自己以外的开发人员有时难以阅读。这就是说我经常这样做但是以分配方式和检查方式如下:

while(false !== ($info = mysql_fetch_array($result))) {

} 

答案 1 :(得分:0)

问题陈述是错误的。

没有“分配而不是平等”。 IF语句(以及其他控制流操作符)不仅限于比较运算符,而且可以评估几乎任何PHP表达式。并且语言不会以任何方式“期待平等检查”。语言只需要一个可以转换为布尔值并与之比较的值 IF运算符和比较运算符之间没有必要的连接。这是两个可以独立使用的不同运算符。

即。没有if的比较:

$var = $a == $b; // $var now contains boolean value

相反:

if ($a + $b) // addition
if (isTrue()) // function
if ($var) // variable

将评估上面的每个表达式,结果转换为boolean,并通过IF语句检查此布尔值。

所以,只要你明白自己在做什么,它就没事了。

答案 2 :(得分:-1)

您已经在问题中发现了问题所在。

问题的解决方案通常是使用Iterator模式。

$jurisdictions = new MysqlResultIterator($data_jurisdiction);

foreach ($jurisdictions as $info)
{
    // some stuff
}

对于每个非mysql_*数据库,foreach的{​​{1}}支持可直接用于结果集。

Foreach使得没有结果和下一个结果之间的区别更加明显。 Iterator模式允许表达有效性,无需将其分配给结果变量。