PHPのコレクションクラス

Joseph Gordon-Levitt
リリース: 2025-02-23 10:32:10
オリジナル
456 人が閲覧しました

Collection Classes in PHP

コアポイント

  • PHPコレクションクラスは、従来の配列データ構造に代わるオブジェクト指向の代替品です。
  • 基本的なコレクションクラスでは、アイテムを追加、取得、削除する方法、およびコレクションサイズと指定されたキーがコレクションに存在するかどうかを判断する方法を提供する必要があります。
  • コレクションクラスは、特に大規模なデータセットを使用する場合、遅延インスタンス化を使用し、必要な場合にのみ配列に要素を作成し、システムリソースを保存するため、パフォーマンスを改善できます。
  • コレクションクラスは、PHPを使用してデータベースを使用する場合に特に役立ちます。これは、大きなデータセットをより効率的に管理し、コードの読み取りと保守を容易にすることができるためです。

コレクションクラスは、従来の配列データ構造のオブジェクト指向の代替品です。配列と同様に、コレクションにはメンバー要素が含まれていますが、これらの要素は文字列や整数などの単純なタイプではなくオブジェクトになる傾向があります。コレクションクラスの一般的な機能は次のとおりです。-オブジェクト配列の周りにラッパーを作成します。 - コレクションは可変です - 新しい要素を追加でき、既存の要素を変更または削除することができます。 - ソートアルゴリズムは不安定です(これは、等しい要素の順序が不確実であることを意味します)。 -delayインスタンス化を使用して、システムリソースを保存できます。

配列の問題

アプリケーションには、多くの場合、他のオブジェクトグループを含むオブジェクトがあります。これは、コレクションを使用するのに最適な場所です。たとえば、書店システムを作成することにしたとします。とりわけ、顧客が購入したい本のリストも保存している顧客クラスを書いたとしましょう。 <?PHPクラスの顧客 { public $ items = array(); // ... }

$ customer = new Customer(1234); foreach($ customer-> items as $ item){ echo $ item-> name; }

<code>
如果最明显的方法(使用数组)是最佳方法,我不会写这篇文章。上面的例子有这些问题:- 我们破坏了封装——数组作为公共成员变量公开。- 索引以及如何遍历数组以查找特定项目存在歧义。

此外,为了确保数组可用于任何可能访问它的代码,我们必须在与客户信息同时从数据库中填充信息列表。这意味着即使我们只想打印客户的姓名,我们也必须获取所有项目信息,这会不必要地增加数据库的负载,并可能拖慢整个应用程序。我们可以通过创建一个集合类作为数组的面向对象包装器并使用延迟实例化来解决这些问题。延迟实例化是一种机制,通过这种机制,我们只在我们实际需要时才创建数组中的元素。它被称为“延迟”,因为对象自行决定何时实例化组件对象,而不是在实例化时盲目地创建它们。


**基本的集合类**

集合类需要公开允许我们添加、检索和删除项目的方法,并且拥有一个让我们知道集合大小的方法也很有帮助。因此,一个基本的类将从这里开始:```
<?php class Collection 
{
    private $items = array();

    public function addItem($obj, $key = null) {
    }

    public function deleteItem($key) {
    }

    public function getItem($key) {
    }
}</code>
ログイン後にコピー
ログイン後にコピー

$items配列は、コレクションのメンバーとしてオブジェクトを保存する場所を提供します。 addItem()コレクションに新しいオブジェクトを追加することができますdeleteItem()オブジェクトを削除し、getItem()オブジェクトを返します。 addItem()を使用して、コレクションをコレクションに追加して、$items配列の指定された場所に配置します(キーが提供されていない場合は、PHPに次の使用可能なインデックスを選択します)。既存のキーを含むオブジェクトを追加しようとする場合、既存の情報の意図しない上書きを防ぐために例外をスローする必要があります。 パブリック関数additem($ obj、$ key = null){ if($ key == null){ $ this-&gt; items [] = $ obj; } それ以外 { if(ISSET($ this-&gt; items [$ key])){ 新しいkeyhasuseException( "key $ key既に使用されている")を投げます。 } それ以外 { $ this-&gt; items [$ key] = $ obj; } } }

<code>
如果最明显的方法(使用数组)是最佳方法,我不会写这篇文章。上面的例子有这些问题:- 我们破坏了封装——数组作为公共成员变量公开。- 索引以及如何遍历数组以查找特定项目存在歧义。

此外,为了确保数组可用于任何可能访问它的代码,我们必须在与客户信息同时从数据库中填充信息列表。这意味着即使我们只想打印客户的姓名,我们也必须获取所有项目信息,这会不必要地增加数据库的负载,并可能拖慢整个应用程序。我们可以通过创建一个集合类作为数组的面向对象包装器并使用延迟实例化来解决这些问题。延迟实例化是一种机制,通过这种机制,我们只在我们实际需要时才创建数组中的元素。它被称为“延迟”,因为对象自行决定何时实例化组件对象,而不是在实例化时盲目地创建它们。


**基本的集合类**

集合类需要公开允许我们添加、检索和删除项目的方法,并且拥有一个让我们知道集合大小的方法也很有帮助。因此,一个基本的类将从这里开始:```
<?php class Collection 
{
    private $items = array();

    public function addItem($obj, $key = null) {
    }

    public function deleteItem($key) {
    }

    public function getItem($key) {
    }
}</code>
ログイン後にコピー
ログイン後にコピー

addItem()メソッドのパラメーターはオプションであるため、コレクション内の各アイテムで使用されるキーを必ずしも知っているわけではありません。それを必要とする可能性のある外部コードにキーのリストを提供する方法を追加することをお勧めします。キーは配列として返すことができます: `` ` public function keys(){ return array_keys($ this-&gt; items); }$key

<code>
`deleteItem()` 和 `getItem()` 方法将键作为参数,指示哪些项目是针对删除或检索的目标。如果提供了无效的键,则应抛出异常。```
public function deleteItem($key) {
    if (isset($this->items[$key])) {
        unset($this- >items[$key]);
    }
    else {
        throw new KeyInvalidException("Invalid key $key.");
    }
}

public function getItem($key) {
    if (isset($this->items[$key])) {
        return $this->items[$key];
    }
    else {
        throw new KeyInvalidException("Invalid key $key.");
    }
}</code>
ログイン後にコピー
そして、

およびgetItem()は、無効なキーが渡された場合、例外をスローする可能性があるため、セットに特定のキーが存在するかどうかを判断することもお勧めします。 `` ` public function keyexists($ key){ ISSETを返す($ this-&gt; items [$ key]); }deleteItem()

<code>
知道集合中有多少项目可能也有帮助。```
public function length() {
    return count($this->items);
}</code>
ログイン後にコピー
この例は特に興味深いものではないかもしれませんが、このクラスの使用方法についてのアイデアが得られるはずです。

結論

コレクションは、特定の契約が保証されているより専門的な作業方法と見なすことができます。コレクションクラスは、従来のアレイに代わる非常に便利なオブジェクト指向の代替品であり、構築できるほぼすべてのアプリケーションで実装できます。メンバーに慎重な管理と一貫したAPIを提供するため、クラスを使用するコードを簡単に記述できます。

(この部分の内容は記事の主なテーマとはほとんど関係がなく、擬似オリジナル効果に影響を与えるため、FAQの部分は省略されています。別々にリクエスト。)>

以上がPHPのコレクションクラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート