[英]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
,但在大多数情况下,将同时实现ArrayAccess
和Countable
。
在实现ArrayAccess
和/或Countable
时要牢记一点:不可能使对象的行为完全像数组。
要测试是否为空,您将不得不采用以下任一方法:
$myObject->isEmpty()
count()
(必须实现Countable
才有意义)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.