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)这是否类似于您通常在另一种语言中发现的语法?如果是,是哪种语言?
答案 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()
的一个令人费解的选择。
所以回答您的问题:
这无关紧要。他们做的事情完全不同。
这是基于意见的(对我来说,这是不熟悉编程的人的语法。)