[英]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.