for($i=0; isset($_POST['key_str'][$i]) != null; $i++)
{
// some PHP here
}
我在工作中继承了一些遗留代码,我在几个地方找到了上面的for()循环.我多年来一直在编写PHP,Javascript和Python,从未见过这样的东西.我的直觉告诉我,写这个遗留代码的人来自不同的语言.可能还没有很有经验.
问题:
1)isset($_ POST [‘key_str’] [$i])是否比count更好($_ POST [‘key_str’])?
2)这是否类似于您通常在其他语言中找到的语法?如果是这样,哪种语言?
解决方法:
isset()是一个返回布尔值的语言结构,因此它永远不能为空.但是,comparison使用等于运算符(==)而不是相同的运算符(===),因此type juggling applies:
Type of Operand 1 Type of Operand 2 Result
bool or null anything Convert both sides to bool
…和null casts到布尔值false所以:
true != null → true != false → true
false != null → false != false → false
因此循环等效于:
for($i=0; isset($_POST['key_str'][$i]); $i++){}
换句话说,!= null是多余的并且损害可读性.
现在,方括号用于按键读取数组元素或按字节偏移读取字符串.因为$_POST是一个外部变量,所以循环实际上可以同时执行 – 我认为前者是预期的.如果没有进一步的背景,就不可能说出它的意图或者如何重写它,但我怀疑它是foreach()的一个复杂的替代品.
那么回答你的问题:
>这无关紧要.他们完全不同的事情.
>这是基于意见的(对我来说,这是一般人不熟悉编程的语法.)