加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

php empty 函数判断结果为空但实际值却为非空的原因解析

发布时间:2021-05-26 07:30:21 所属栏目:编程 来源:网络整理
导读:最近我在一个项目中行使 empty 时获取到了一些料想之外的功效。下面是我处理赏罚后的调试记录,在这里与你分享了。 firstName,empty($person->firstName)); 它的功效是: string(5) "Freek"bool(true) 功效出人意表。为什么变量的值为字符串,但同时会是空值呢

最近我在一个项目中行使 empty 时获取到了一些料想之外的功效。下面是我处理赏罚后的调试记录,在这里与你分享了。

firstName,empty($person->firstName) );

它的功效是:

string(5) "Freek" bool(true)

功效出人意表。为什么变量的值为字符串,但同时会是空值呢?让我们在 $person->firstName 变量上实行行使其余一些函数来举办判定吧:

firstName,empty($person->firstName),isset($person->firstName),is_null($person->firstName) );

以上功效为:

string(5) "Freek" bool(true) // empty bool(true) // isset bool(false) // is_null

译者注:这边的功效也许存在题目 isset 的功效同样为 false,可以到 这里 去运行下查察功效。

isset 和 is_null 函数执行功效切合预期判定,唯独 empty 函数返回了错误功效。

这里让我们来看看 person 类的实当代码吧:

attributes = $attributes; } public function __get($name) { return $this->attributes[$name] ?? null; } }

从上述代码我们可以看到 Person 工具的成员变量是通过 __get 把戏要领从 $attributes 数组中检索出来的。

当将变量传入一个平凡函数时,$person->firstName 会先举办取值处理赏罚,然后再将获取到的功效作为参数传入函数内。

可是 empty 不是一个函数,而是一种数据布局。以是当将 $person->firstName** 传入 **empty** 时,并不会先举办取值处理赏罚。而是会先判定 **$person 工具成员变量 firstName 的内容,因为这个变量并未真实存在,以是返回 false。

在正中应用场景下,假如你但愿 empty 函数可以或许正常处理赏罚变量,我们必要在类中实现 __isset 把戏要领。

attributes = $attributes; } public function __get($name) { return $this->attributes[$name] ?? null; } public function __isset($name) { $attribute = $this->$name; return !empty($attribute); } }

这是当 empty 举办节制判定时,会行使这个把戏要领来判定最终的功效。

再让我们看看输出功效:

firstName,empty($person->firstName) );

新的检测功效:

string(5) "Freek" bool(false)

总结

以上所述是小编给各人先容的php empty 函数判定功效为空但现实值却为非空的缘故起因理会,但愿对各人有所辅佐。措施员碰着题目城市上(编程之家52php.cn)查找题目解答要领!假如认为站点还不错,顺手转发给措施员伴侣一下!

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读