2010-11-30 16 views
3

PHPでArrayAccessインターフェイスを実装すると、Array PropertiesとしてObject Propertiesにアクセスできます。 オブジェクトが配列のように動作する利点は何ですか?PHPのArrayAccessインターフェイスのメリット

私はArrayAccess Interfaceで 'FORM' を実装するフレームワークを参照して、我々がアクセスすることができます(HTML)はフォームなどの分野のものをオブジェクトと同様、

$form['nameField'] instead-of $form->nameField 
$form['titleField'] instead-of $form->titleField 

$form['nameField]$form->nameField代わり-の

を使用する利点は、ですいただきました! 「配列データ構造」の速度、またはオブジェクトと配列形式間の移植性?

または何か不足していますか? :)

+0

可能な複製:http://stackoverflow.com/questions/4072927/what-are-the-benefits-of-using-spl-arrayobject-arrayiterator-recursivearrayiter –

+0

本で読むように、ArrayIteratorsはLargeデータセット。単純なデータの場合、foreachループで十分です。したがって、ArrayAccessについてはわからない... –

答えて

5

機能上の利点はありませんが、構造的な利点はありません。

マップを定義する場合、類似した種類の任意の数の名前付き要素を含むことができます。オブジェクトのプロパティは、通常、よく定義され、さまざまな型のものです。

簡潔に言えば、ArrayAccessを実装すると、「私のオブジェクトも(同様に)配列のように動作します」と言います。インターフェイスを使用

http://en.wikipedia.org/wiki/Associative_array

4

最初は、キーが有効な識別子を構成していないメンバーにアクセスしやすくなりました(例:扱いにくい文字を含む)。たとえば、より厄介な$form->{'some-field'}の代わりに$form['some-field']と書くことができます。これ以外

が、それは基本的に(と若干異なるセマンティックな意味合いで)異なる構文を可能除き、__get__set__isset__unsetマジックメソッドを実装するのと同じです。 overloadingを参照してください。

+0

なぜdownvote?答えは正しい。私は再びアップアップしました。 –

1

より使いやすく、より強力なツールを作ります。私はIteratorと一緒にコレクションに使用します。それはあなたのオブジェクトがそうでないときでも、配列のように動作することを可能にします。その力は、プロパティ名を配列要素にマップしないことから来ていますが、配列へのアクセスには全く別のことがあります。最初の部分で

すなわち

 
$users = new UserCollection(); 
$users->company = $companyid; 
$user = $users[$userid]; 

// also 
foreach($users as $user) { 
    // Do something for each user in the system 
} 

、私はusercollectionのオブジェクトを作成し、企業IDのそれにそのユーザーのリストを制限しています。コレクションにアクセスすると、その会社のIDを持つユーザーが表示されます。 2番目の部分では、会社の各ユーザーを繰り返し処理できます。

関連する問題