谁一开始就是大神?

关于框架源码内的yii2\helpers\BaseArrayHelper的一处疑问[2.0]

下面这个方法判断元素($needle)是否在数组($haystack)内的

$haystack不单指数组,如果可以用foreach进行遍历也是可以的

public static function isIn($needle, $haystack, $strict = false)
    {
        if ($haystack instanceof \Traversable) { // 如果$haystack可以用foreach遍历
            foreach ($haystack as $value) {
                if ($needle == $value && (!$strict || $needle === $haystack)) {
                    return true;
                }
            }
        } elseif (is_array($haystack)) {
            return in_array($needle, $haystack, $strict);
        } else {
            throw new InvalidParamException('Argument $haystack must be an array or implement Traversable');
        }

        return false;
    }

第五行

if ($needle == $value && (!$strict || $needle === $haystack)) {

为什么是 $needle === $haystack ,而不是 $needle === $value;

$strict 为 TRUE 时指的不是元素值相等并且类型相同吗?关原数组什么事呢?很疑惑,望大神普及一下这个知识点

我这里源文件是$value哦,你的可能版本比较老了,是一个以前bug
$haystack 不一定是数组,只是一个可遍历对象,$strict 为 TRUE 时,用===, 三等号是不做类型转换的

赞(0) 打赏
未经允许不得转载:菜鸟之家 » 关于框架源码内的yii2\helpers\BaseArrayHelper的一处疑问[2.0]

评论 抢沙发

登录

找回密码

注册