PHP -Namespaces
PHP-Namespaces
Namespaces sind Qualifizierer, die zwei verschiedene Probleme lösen:
- Sie ermöglichen eine bessere Organisation, indem Klassen gruppiert werden, die zusammenarbeiten, um eine Aufgabe auszuführen
- Sie ermöglichen die Verwendung desselben Namens für mehr als eine Klasse
Beispielsweise haben Sie möglicherweise eine Reihe von Klassen, die eine HTML-Tabelle beschreiben, z. B. Table, Row und Cell, während Sie auch eine andere Reihe von Klassen haben, um Möbel zu beschreiben, z. B. Table, Chair und Bed. Über Namespaces lassen sich die Klassen in zwei unterschiedliche Gruppen gliedern und gleichzeitig wird verhindert, dass die beiden Klassen Table und Table verwechselt werden.
Deklarieren eines Namensraums
Namespaces werden am Anfang einer Datei mit dem namespace
Schlüsselwort deklariert:
Syntax
Deklarieren Sie einen Namespace namens Html:
namespace Html;
Hinweis: Eine namespace
Deklaration muss das Erste in der PHP-Datei sein. Der folgende Code wäre ungültig:
<?php
echo "Hello World!";
namespace Html;
...
?>
In dieser Datei deklarierte Konstanten, Klassen und Funktionen gehören zum Html- Namespace:
Beispiel
Erstellen Sie eine Tabellenklasse im Html-Namespace:
<?php
namespace Html;
class Table {
public $title = "";
public
$numRows = 0;
public function message() {
echo "<p>Table
'{$this->title}' has {$this->numRows} rows.</p>";
}
}
$table = new
Table();
$table->title = "My table";
$table->numRows = 5;
?>
<!DOCTYPE html>
<html>
<body>
<?php
$table->message();
?>
</body>
</html>
Zur weiteren Organisation ist es möglich, verschachtelte Namensräume zu haben:
Syntax
Deklarieren Sie einen Namespace namens Html in einem Namespace namens Code:
namespace Code\Html;
Namensräume verwenden
Jeder Code, der einer namespace
Deklaration folgt, arbeitet innerhalb des Namensraums, sodass Klassen, die zum Namensraum gehören, ohne Qualifizierer instanziiert werden können. Um von außerhalb eines Namensraums auf Klassen zuzugreifen, muss der Klasse der Namensraum angehängt sein.
Beispiel
Verwenden Sie Klassen aus dem HTML-Namespace:
$table = new Html\Table()
$row = new Html\Row();
Wenn viele Klassen aus demselben Namensraum gleichzeitig verwendet werden, ist es einfacher, das namespace
Schlüsselwort zu verwenden:
Beispiel
Verwenden Sie Klassen aus dem Html-Namespace, ohne dass der Html\qualifier erforderlich ist:
namespace Html;
$table = new Table();
$row = new Row();
Namespace-Alias
Es kann nützlich sein, einem Namensraum oder einer Klasse einen Alias zu geben, um das Schreiben zu vereinfachen. Dies geschieht mit dem use
Schlüsselwort:
Beispiel
Geben Sie einem Namensraum einen Alias:
use Html as H;
$table = new H\Table();
Beispiel
Geben Sie einer Klasse einen Alias:
use Html\Table as
T;
$table = new T();