我知道while-condition子句中的以下赋值将起作用:
while ($info=mysql_fetch_array($data_jurisdiction))
{
//some stuff
}
$info
被赋予一些值,而while条件将循环,除非赋值的右侧返回FALSE
,NULL
,0
,{{1}等等。
问题:在语言语法需要进行相等检查的情况下进行赋值是好还是坏? Zend Studio立即指出这是一个警告。每种方法的优缺点是什么?
答案 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模式允许表达有效性,无需将其分配给结果变量。