繁体   English   中英

当我们在php中实现ArrayAccess接口时,empty()方法有什么作用?

[英]What does empty() method do when we implement ArrayAccess interface in php?

我是php的新手,可以从php.net学习它。 以下参考链接上有一条注释

使用empty()时,只有在ArrayAccess :: offsetExists()返回TRUE时,才会调用ArrayAccess :: offsetGet()并检查是否为空。

这是什么意思?

参考链接( http://php.net/manual/en/arrayaccess.offsetexists.php )。

希望这会有所帮助,但是太多的逻辑组合并不一定总是有帮助的...

empty()用于检查某个值是否被视为“空”,这意味着该值不存在或值为false( http://php.net/manual/en/function.empty.php )。

为了能够在实现ArrayAccess的类中进行检查(例如,允许使用[]进行数组类型访问的类),这意味着此过程分为两个阶段。

首先-元素是否存在。 这是通过调用带有您要检查的元素的offsetExists()来完成的。 因此, $data = [1,2]; ,然后检查元素2, offsetExists()将返回false(只有0和1具有值),而empty()将返回true,因为条件1(该项不存在)为true。 对于确实存在的元素1进行调用, empty()将返回false( http://php.net/manual/en/arrayaccess.offsetexists.php )。

其次,如果该项目确实存在,则empty()的第二部分表示如果该值为false,则也将其视为空。 offsetGet()将从正在测试的元素中获取值。 因此$data[true,false] ,当元素0调用offsetGet()时,它将返回位置0处的值-值为true。 条件2说明该值是否为false,在这种情况下不是这种情况,因此empty()将返回false。 但是对于值1为false的元素1调用, empty()将返回true。

如果您想知道在实现 ArrayAccess的对象上发生了什么(问题尚不完全清楚),那么这是要解决的: empty()或类似空的测试(例如if ( $myObject ) ... )将总是返回TRUE,您对此无能为力。

此行为在PHP的错误跟踪器中标记为“不是错误”: https : //bugs.php.net/bug.php? id =62155 该错误报告专门涉及Countable ,但在大多数情况下,将同时实现ArrayAccessCountable

在实现ArrayAccess和/或Countable时要牢记一点:不可能使对象的行为完全像数组。

要测试是否为空,您将不得不采用以下任一方法:

  1. 实现自己的“类似空”功能,例如$myObject->isEmpty()
  2. 在结果上明确调用count() (必须实现Countable才有意义)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM