簡體   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