for循环使用isset()!= null-为什么?

时间:2018-08-09 15:22:47

标签: php

select case when [Estimated Return Date] > '17530101' AND

       [Estimated Return Date] <= DATEDIFF(day, -90, GETDATE()) 
     then '90 Days or Less To Estimated Return Date' 
     else '' end as [Alert], [No_]
from [Rental Header];

我在工作中继承了一些旧代码,并且我在上面的for()循环中的多个地方发现了这些代码。我多年来一直在编写PHP,Javascript和Python,但从未见过这样的事情。我的直觉告诉我,这是编写此旧代码的人来自另一种语言。并且可能还没有很丰富的经验。

问题:

1)for($i=0; isset($_POST['key_str'][$i]) != null; $i++) { // some php here } 的表现是否优于isset($_POST['key_str'][$i])

2)这是否类似于您通常在另一种语言中发现的语法?如果是,是哪种语言?

2 个答案:

答案 0 :(得分:3)

在isset内部,$i(在循环中递增)用于此表达式。 $_POST['key_str'][$i],这是支票的一部分。

因此,基本上,$_POST['key_str']应该是一个数组,并且此循环将遍历该数组中的所有项目。

如果愿意,可以使用count(),或将整个内容替换为foreach循环,尽管如果$_POST['key_str']根本没有设置或设置为{不是数组。 isset是解决此问题的一种非常简单的方法,因为它可以处理所有这些情况并返回false,因此在该情况下根本不会进入循环。

答案 1 :(得分:2)

isset()是一种返回布尔值的语言构造,因此永远不能为null。但是,comparison使用等于运算符(==)而不是相同运算符(===),因此{{3} }:

Type of Operand 1   Type of Operand 2   Result
bool or null        anything            Convert both sides to bool

…和null type juggling applies的布尔值false如此:

true  != null → true  != false → true
false != null → false != false → false

因此循环等效于:

for($i=0; isset($_POST['key_str'][$i]); $i++){}

换句话说,!= null是多余的,并且损害了可读性。

现在,方括号用于按键读取数组元素,或按偏移量读取字符串字节。由于$_POST是一个外部变量,因此循环实际上可以同时执行这两项操作-我想前者是有意的。没有进一步的上下文,就无法说出完成的意思或如何重写它,但我怀疑它是foreach()的一个令人费解的选择。

所以回答您的问题:

  1. 这无关紧要。他们做的事情完全不同。

  2. 这是基于意见的(对我来说,这是不熟悉编程的人的语法。)