Heim >Backend-Entwicklung >PHP-Tutorial >Sammelkurse in PHP

Sammelkurse in PHP

Joseph Gordon-Levitt
Joseph Gordon-LevittOriginal
2025-02-23 10:32:10463Durchsuche

Collection Classes in PHP

Kernpunkte

  • PHP-Sammelklasse ist eine objektorientierte Alternative zu herkömmlichen Array-Datenstrukturen.
  • Die grundlegende Sammlungsklasse sollte Methoden zum Hinzufügen, Abrufen und Löschen von Elementen sowie Methoden zur Bestimmung bereitstellen, ob die Sammlungsgröße und gegebenen Tasten in der Sammlung vorhanden sind.
  • Sammlungsklassen können die Leistung verbessern, insbesondere bei der Arbeit mit großen Datensätzen, da sie verzögerte Instanziierung verwenden, wodurch Elemente im Array nur bei Bedarf erstellt werden und Systemressourcen sparen.
  • Sammlungsklassen sind besonders nützlich, wenn sie mit Datenbanken mit PHP arbeiten, da sie große Datensätze effizienter verwalten und den Code leichter zu lesen und zu warten.

Sammlungsklassen sind objektorientierte Alternativen zu herkömmlichen Array-Datenstrukturen. Ähnlich wie bei Arrays enthalten Sammlungen Elemente, obwohl diese Elemente eher Objekte als einfachere Typen wie Zeichenfolgen und Ganzzahlen sind. Die gängigen Merkmale von Sammelklassen sind:- Wrapper um Objektarrays erstellen. - Sammlungen sind veränderlich - Neue Elemente können hinzugefügt und vorhandene Elemente geändert oder gelöscht werden. - Der Sortieralgorithmus ist instabil (dies bedeutet, dass die Reihenfolge gleicher Elemente ungewiss ist). - Die Verzögerung der Instanziierung kann verwendet werden, um Systemressourcen zu sparen.

Array -Probleme

Anwendungen haben häufig Objekte, die andere Objektgruppen enthalten, was ein großartiger Ort für die Verwendung von Sammlungen ist. Angenommen, wir entscheiden uns, ein Buchhandelsystem zu erstellen. Angenommen, wir haben einer Kundenklasse geschrieben, die unter anderem auch eine Liste von Büchern spart, die der Kunde kaufen möchte: `` ` & lt;? PHP -Klasse Kunde { public $ poarts = array (); // ... }

$ customer = neuer Kunde (1234); foreach ($ customer- & gt; Artikel als $ item) { echo $ item- & gt; name; }

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

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


**基本的集合类**

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

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

    public function deleteItem($key) {
    }

    public function getItem($key) {
    }
}</code>

$items Array bietet einen Ort, an dem Objekte als Mitglieder der Sammlung gespeichert werden können. addItem() ermöglicht es uns, der Sammlung neue Objekte hinzuzufügen, deleteItem() Objekte löschen, getItem() Rückgabeobjekte. Mithilfe addItem() fügen wir das Objekt zur Sammlung hinzu, indem wir es in den angegebenen Ort des $items -Array einstellen (falls kein Schlüssel bereitgestellt wird, lassen Sie PHP den nächsten verfügbaren Index auswählen). Wenn Sie versuchen, ein Objekt mit einem vorhandenen Schlüssel hinzuzufügen, sollte eine Ausnahme ausgelöst werden, um eine unbeabsichtigte Überschreibung vorhandener Informationen zu verhindern: `` ` public function addItem ($ obj, $ key = null) { if ($ key == null) { $ this- & gt; Artikel [] = $ obj; } anders { if (isset ($ this- & gt; punkte [$ key])) { Neue Keyhasusexception werfen ("Key $ Key bereits verwendet."); } anders { $ this- & gt; Artikel [$ key] = $ obj; } } }

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

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


**基本的集合类**

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

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

    public function deleteItem($key) {
    }

    public function getItem($key) {
    }
}</code>

Da der Parameter addItem() der $key -Methode optional ist, wissen wir nicht unbedingt die Schlüssel, die von jedem Element in der Sammlung verwendet werden. Es ist eine gute Idee, einen Weg hinzuzufügen, um jedem externen Code eine Liste von Schlüssel zur Verfügung zu stellen, die möglicherweise erforderlich sind. Der Schlüssel kann als Array zurückgegeben werden: `` ` öffentliche Funktion Keys () { return array_keys ($ this- & gt; items); }

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

und weil getItem() und deleteItem() eine Ausnahme ausführen können, wenn ein ungültiger Schlüssel übergeben wird, ist es auch eine gute Idee, festzustellen, ob ein bestimmter Schlüssel im Satz vorhanden ist. `` ` öffentliche Funktion KeyExists ($ key) { Return Isset ($ this- & gt; Artikel [$ key]); }

<code>
知道集合中有多少项目可能也有帮助。```
public function length() {
    return count($this->items);
}</code>

Dieses Beispiel ist vielleicht nicht besonders interessant, aber es sollte Ihnen eine Vorstellung davon geben, wie diese Klasse verwendet wird.

Schlussfolgerung

Sammlungen können als professionellere Art der Arbeitsaufträge angesehen werden, in denen bestimmte Verträge garantiert sind. Sammelklassen sind eine sehr nützliche objektorientierte Alternative zu herkömmlichen Arrays und können in nahezu jeder Anwendung implementiert werden, die Sie möglicherweise erstellen. Es bietet sorgfältige Verwaltung und konsistente APIs für seine Mitglieder, was es einfach macht, Code zu schreiben, der die Klasse verwendet.

(Der FAQS-Teil wird hier weggelassen, da der Inhalt dieses Teils wenig mit dem Hauptthema des Artikels zu tun hat und zu lang ist, was den Pseudo-Ursprungseffekt beeinflusst. Bei Bedarf können Sie erzeugen eine Anforderung separat.)

>

Das obige ist der detaillierte Inhalt vonSammelkurse in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Git haken zum Spaß und GewinnNächster Artikel:Git haken zum Spaß und Gewinn