簡體   English   中英

php中ArrayAccess接口的目的是什么?

[英]what is the purpose of ArrayAccess interface in php?

ArrayAccess 接口是

用於提供訪問對象作為數組。

正如文檔所說。 但大多數數組函數都不起作用。 普通的對象函數也有這種轉換的問題。 那是什么想法。 所以例如

  1. 您不能在實現此接口的類對象上調用“array_key_exists”。
  2. 除非新類也實現了 Iterator 接口,否則類不能是可迭代的。
  3. 您不能通過 ArrayAccess 進行引用分配。(您必須自己實現(自定義函數來執行此操作)。
  4. 數組的大多數函數不適用於類實現此接口。

如果沒有明確的原因,我們為什么要讓自己痛苦。

這個想法是允許您使用數組語法訪問對象的屬性。 這通常非常方便,許多實用程序類都實現了它。 例如,Laravel 中的 Eloquent 模型實現了它,集合也是如此。

這並不意味着實現該接口的對象可以作為參數傳遞給數組函數之一。 然而,如果對象存儲的數據是數組,那么在對象上實現類似的方法通常是有意義的——例如,Laravel 集合實現了map()filter() ,這些方法可能在內部使用它們的數組對應物。 使用這些方法通常會使代碼更清晰、更容易理解,因為您可以將每個步驟鏈接起來。 像 JavaScript 和 Python 這樣的語言(其中數組是具有這些開箱即用的方法的對象)在歷史上更擅長函數式編程,並且使用 Laravel 集合之類的東西而不是數組也可以在 PHP 中實現這種編程風格。 我強烈推薦 Adam Wathan 所著的Refactoring to Collections一書了解更多詳細信息。

在檢查像 PsySh 這樣的 REPL 中的對象時,它也很有用,因為您可以更輕松地訪問單個屬性。 實現Traversable也意味着您可以在檢查數據時對其進行迭代。 您還可以鍵入提示接口,以便方法可以接受實現它的任何內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM