PehBehBeh

Erfahrungen eines Hobby-Webentwicklers

Tutorial: Namespaces in PHP verwenden – Grundlagen (Teil 1)

| 5 Kommentare

Die Einführung von Namespaces ist wohl die größte Veränderung in PHP 5.3.  Sie sind dazu da, die Übersicht und die Struktur in PHP-Anwendungen zu verbessern. Außerdem bedeuten sie einen weiteren Schritt in Richtung objektorientierte Programmierung in PHP.


Was sind die Voraussetzungen?

Bevor wir überhaupt Namespaces verwenden können benötigen wir PHP 5.3 oder höher. Die zurzeit neueste Version 5.3.2 (04.03.2010) könnt ihr auf PHP.net runterladen. Ist eine aktuelle Version installiert, sollten die Beispiele aus diesem Tutorial kein Problem darstellen.

Wozu benötigt man Namespaces?

Bei großen Projekten besteht die Gefahr, dass der Name für eine Klasse ausversehen mehrfach verwendet wird. Dies wird oft auch dadurch erreicht, dass mehrere Libraries zum Einsatz kommen. Natürlich kann es auch sein, dass man verschiedenen Klassen absichtlich den gleichen Namen gibt. Das ist jedoch erst mit Namespaces möglich. Zudem muss nicht auf verkomplizierte Klassennamen wie “MeinProjekt_Database_MySQL_Connection” zurückgegriffen werden.

Mit Namespaces können Konstanten, Klassen und Funktionen gruppiert werden.

Wie werden Namespaces definiert?

Der Code eines Namespaces wird mit einem einfachen namespace-Keyword definiert. Der nachfolgende Code in der PHP-Datei gehört diesem Namespace an. Deshalb ist es wichtig, dass die Namespace-Deklaration das erste Kommando innerhalb der Datei ist.

1
2
3
4
5
<?php
// Namespace definieren:
namespace MeinProjekt;
// der folgende Code gehört zum Namespace "MeinProjekt"
// ...

Es ist zwar möglich mehrere Namespaces innerhalb einer Datei zu benutzen, jedoch kann Code niemals mehr als einem Namespace angehören. Es wird immer der zuletzt deklarierte Namespace verwendet.

1
2
3
4
5
6
7
8
9
10
11
12
<?php
namespace MeinProjekt;
// der folgende Code gehört zum Namespace "MeinProjekt"
// ...
 
namespace MeinProjekt2;
// der folgende Code gehört zum Namespace "MeinProjekt2"
// ...
 
namespace MeinProjekt3;
// der folgende Code gehört zum Namespace "MeinProjekt3"
// ...

Ich würde jedoch empfehlen nur einen Namespace pro Datei zu verwenden.

Sub-Namespaces

Es ist möglich Sub-Namespaces zu definieren um eine Art Ordner-Hierarchie herzustellen. So können Libraries sehr gut aufgeteilt werden.

  • MeinProjekt
  • MeinProjekt\Datenbank
  • MeinProjekt\Datenbank\MySQL
  • MeinProjekt\Datenbank\PostgreSQL

Wie man sieht, wird zum Trennen eine Backslash (\) verwendet. Das war nicht immer so! Es gibt noch veraltete Tutorials im Netz, die einen doppelten Doppelpunkt (::) als Separator verwenden.

Wie rufe ich Code aus Namespaces auf?

Es gibt mehrere Möglichkeiten Code aus Namespaces aufzurufen. Die “einfachste” werde ich euch in diesem Teil des Tutorials vorstellen.

Nehmen wir an wir haben folgende vereinfachte Library mit einer Klasse, einer Funktion und einer Konstante im Namespace “MeinProjekt\Test” (Datei: MeinProjekt.php).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
namespace MeinProjekt\Test;
 
const MEINE_KONSTANTE = 'Hallo konstante Welt!';
 
function halloWelt()
{
    return 'Hallo funktionale Welt!';
}
 
class MeineKlasse
{
    public static function halloWelt()
    {
        return 'Hallo klassische Welt!';
    }
}

Direkter Aufruf

In einer weiteren Datei binden wir zunächst unsere Library (MeinProjekt.php) ein und können wie folgt auf den Code aus dem Namespace “MeinProjekt\Test” zugreifen:

1
2
3
4
5
6
<?php
require_once 'MeinProjekt.php';
 
echo MeinProjekt\Test\MEINE_KONSTANTE . '<br />';
echo MeinProjekt\Test\halloWelt() . '<br />';
echo MeinProjekt\Test\MeineKlasse::halloWelt() . '<br />';

Ausgabe:

Hallo konstante Welt!
Hallo funktionale Welt!
Hallo klassische Welt!

In den nächsten Teilen des Tutorials werde ich euch bessere Varianten zeigen, Code aus Namespaces einzubinden und zu verwenden. Außerdem werde ich erklären, wie ihr PHP Core-Funktionen mit Hilfe von Namespaces überschreiben könnt.

Quellen: PHP.net, SitePoint

Dir hat der Artikel gefallen?
Dann abonniere doch den RSS-Feed!

5 Kommentare

  1. Gutes Tutorial. Kurz, knackig und verständlich ;)

  2. Sehr gutes und hilfreiches Tutorial, zudem verständlich erklärt.

    Vielen Dank dafür!

  3. Der Artikel ist zwar schon älter, aber gibt es noch weitere Teile? BZW. kennst du gute weitere Tutorials? Mir ist der Sinn von namespaces noch nicht geläufig. Vielleicht denke ich aber auch zu minimalistisch und finde das einfach viel umständlicher.

  4. Es sind weitere Teile geplant – nur habe ich momentan nicht genügend Zeit diese Serie fortzuführen.

    Ich kann dir das PHP Manual empfehlen:
    http://php.net/manual/de/language.namespaces.rationale.php

    Dort wird der Verwendungzweck ganz gut erklärt…

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.

*