我们在php中实现ArrayAccess接口时empty()方法做了什么?
What does empty() method do when we implement ArrayAccess interface in php?
我是 php 的新手,正在向 php.net 学习。 注释 在以下参考文献 link 中指出:
When using empty() ArrayAccess::offsetGet() will be called and checked if empty only if ArrayAccess::offsetExists() returns TRUE.
这是什么意思?
引用 link(http://php.net/manual/en/arrayaccess.offsetexists.php).
希望这有帮助,虽然太多的逻辑组合并不总是有帮助...
empty()
用于检查一个值是否被认为是 'empty',这意味着它不存在或该值为假 (http://php.net/manual/en/function.empty.php).
为了能够在实现 ArrayAccess 的 class 中检查这一点(例如允许数组类型访问的 class - 使用 []),这意味着此过程有两个阶段。
首先-元素是否存在。这是通过使用您要检查的元素调用 offsetExists()
来完成的。因此,使用 $data = [1,2];
并检查元素 2,offsetExists()
将 return 为假(只有 0 和 1 有值)- empty()
将 return 为真 - 作为条件 1(该项目不存在)为真。调用确实存在的元素 1,empty()
将 return false (http://php.net/manual/en/arrayaccess.offsetexists.php).
其次,如果该项目确实存在,empty()
的第二部分表示如果值为 false,它也被视为空。 offsetGet()
将从您正在测试的元素中获取值。因此 $data[true,false]
,当为元素 0 调用 offsetGet()
时,它将 return 位置 0 的值 - 即值 true。条件 2 表示如果值为 false,在本例中并非如此,因此 empty()
将 return false。但是调用了值为 false 的元素 1,empty()
将 return 为真。
如果您想知道 实现 ArrayAccess
的对象会发生什么(从问题中不完全清楚),那么就是这样:empty()
或类似空的测试(例如 if ( $myObject ) ...
)将始终 return TRUE,您对此无能为力。
此行为在 PHP 的错误跟踪器中标记为 "Not a bug":https://bugs.php.net/bug.php?id=62155。错误报告专门针对 Countable
,但在大多数情况下 ArrayAccess
和 Countable
都会实现。
实现 ArrayAccess
and/or Countable
时要牢记:要使对象的行为完全像数组是不可能的。
要测试空的,您将不得不求助于:
- 实现您自己的 "empty-like" 功能,例如
$myObject->isEmpty()
- 对结果显式调用
count()
(必须实现 Countable
才有意义)。
我是 php 的新手,正在向 php.net 学习。 注释 在以下参考文献 link 中指出:
When using empty() ArrayAccess::offsetGet() will be called and checked if empty only if ArrayAccess::offsetExists() returns TRUE.
这是什么意思?
引用 link(http://php.net/manual/en/arrayaccess.offsetexists.php).
希望这有帮助,虽然太多的逻辑组合并不总是有帮助...
empty()
用于检查一个值是否被认为是 'empty',这意味着它不存在或该值为假 (http://php.net/manual/en/function.empty.php).
为了能够在实现 ArrayAccess 的 class 中检查这一点(例如允许数组类型访问的 class - 使用 []),这意味着此过程有两个阶段。
首先-元素是否存在。这是通过使用您要检查的元素调用 offsetExists()
来完成的。因此,使用 $data = [1,2];
并检查元素 2,offsetExists()
将 return 为假(只有 0 和 1 有值)- empty()
将 return 为真 - 作为条件 1(该项目不存在)为真。调用确实存在的元素 1,empty()
将 return false (http://php.net/manual/en/arrayaccess.offsetexists.php).
其次,如果该项目确实存在,empty()
的第二部分表示如果值为 false,它也被视为空。 offsetGet()
将从您正在测试的元素中获取值。因此 $data[true,false]
,当为元素 0 调用 offsetGet()
时,它将 return 位置 0 的值 - 即值 true。条件 2 表示如果值为 false,在本例中并非如此,因此 empty()
将 return false。但是调用了值为 false 的元素 1,empty()
将 return 为真。
如果您想知道 实现 ArrayAccess
的对象会发生什么(从问题中不完全清楚),那么就是这样:empty()
或类似空的测试(例如 if ( $myObject ) ...
)将始终 return TRUE,您对此无能为力。
此行为在 PHP 的错误跟踪器中标记为 "Not a bug":https://bugs.php.net/bug.php?id=62155。错误报告专门针对 Countable
,但在大多数情况下 ArrayAccess
和 Countable
都会实现。
实现 ArrayAccess
and/or Countable
时要牢记:要使对象的行为完全像数组是不可能的。
要测试空的,您将不得不求助于:
- 实现您自己的 "empty-like" 功能,例如
$myObject->isEmpty()
- 对结果显式调用
count()
(必须实现Countable
才有意义)。