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

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()的一个复杂的替代品.

那么回答你的问题:

>这无关紧要.他们完全不同的事情.
>这是基于意见的(对我来说,这是一般人不熟悉编程的语法.)

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...