Ausblick auf PHP 5

Dev. Talk
Kommentare

In dieser Ausgabe meiner Kolumne möchte ich Ihnen zwei weitere neue Merkmale von PHP 5 vorstellen: die Interzeptormethoden und die Validierung von XML-Dokumenten mit RelaxNG.

Die Interzeptormethoden von PHP 5

PHP 5 wird die folgenden Interzeptormethoden anbieten. Sie werden automatisch beim Zugriff auf nicht bekannte Attribute und Methoden eines Objektes, beim Versuch, ein Objekt einer nicht deklarierten Klasse zu erzeugen, sowie bei der Typumwandlung eines Objektes in einen String aufgerufen.

  • _autoload($className) wird aufgerufen, wenn ein Objekt der Klasse $className erzeugt werden soll, die Klasse aber nicht deklariert ist.
  • get($memberName) wird aufgerufen, wenn lesend auf das Attribut $memberName eines Objektes zugegriffen wird, das Attribut aber nicht gesetzt ist.
  • set($memberName, $value) wird aufgerufen, wenn schreibend auf das Attribut $memberName eines Objektes zugegriffen wird und das Attribut vorher nicht gesetzt war. Der zweite Parameter $value enthält den Wert, auf den das Attribut gesetzt werden soll.
  • call($methodName, $parameters) wird aufgerufen, wenn eine nicht deklarierte Methode $methodName auf einem Objekt aufgerufen wird. Der zweite Parameter $parameters enthält die Parameter des Methodenaufrufes.
  • _toString() wird aufgerufen, wenn eine Typumwandlung eines Objektes in einen String durchgeführt werden soll.

In größeren Projekten mit komplexer Klassenhierarchie häufen sich die include-Anweisungen in den Quelltextdateien, da eine Klasse meist auf mehrere andere Klassen zurückgreift, sei es, um sie per Vererbung zu erweitern oder um sie durch Objekte zu verwenden. Mithilfe der _autoload()-Funktion, die außerhalb einer Klasse im globalen Sichtbarkeitsbereich deklariert wird, kann ein Callback-Mechanismus programmiert werden, der immer dann eingreift, wenn ein neues Objekt einer nicht deklarierten Klasse instanziert werden soll. Diese Funktion wird mit dem Namen der Klasse als Parameter aufgerufen, von der ein neues Objekt erzeugt werden soll.

Das folgende Beispiel zeigt den einfachsten Fall der Verwendung von _autoload() und geht davon aus, dass alle Klassen in einer Datei deklariert sind, deren Name sich aus dem Namen der Klasse und der Dateiendung .php zusammensetzt. Diese Dateien liegen im include_path der PHP-Umgebung.

Ein einfacher Klassenlader auf _autoload()-Basis

Ist die geforderte Klasse nach Ausführung der _autoload()-Funktion weiterhin unbekannt, so wird die übliche Fehlermeldung ausgegeben. Nicht nur für das Debuggen von objektorientierten PHP-Anwendungen ist es wichtig, eine textuelle Repräsentation eines Objektes zur Verfügung zu haben. Verfügt eine Klasse in PHP 5 über eine _toString()-Methode, so wird diese aufgerufen, wenn ein Objekt der Klasse in einen String umgewandelt werden soll. So gibt das nachstehende Listing Der Stand dieses Kontos beträgt 0,00 Euro. anstatt Object id #1 aus. Letzteres wäre die Ausgabe, wenn die Klasse BankAccount keine _toString()-Methode deklarieren würde.

Typumwandlung eines Objektes in einen String mit _toString()-Methode

balance
);
}
}

$bankAccount = new BankAccount;

print $bankAccount;
?>

Wenn Sie sich für die elegante Umsetzung von Delegation oder die Implementierung des Lazy Initialization-Konzeptes mit den call()- bzw. get()-Interzeptormethoden interessieren, so empfehle ich Ihnen die Lektüre meiner Artikel zu diesen Themen, die auf www.zend.com erschienen sind.

Validierung von XML-Dokumenten mit PHP 5 und RelaxNG

RelaxNG ist eine weitere Schemasprache für XML, die bei OASIS als Nachfolger von RELAX und TREX entwickelt und derzeit von ISO/IEC standardisiert wird. XML Schema ist die Nachfolgetechnologie der in die Jahre gekommenen Document Type Definition (DTD) und wird genutzt, um eine Klasse von XML-Dokumenten zu definieren. Anhand eines solchen Schemas kann dann später eine Aussage darüber getroffen werden, ob ein XML-Dokument Instanz einer so definierten Klasse von XML-Dokumenten ist oder nicht.

PHP 5, dessen XML-Unterstützung von Grund auf überarbeitet wurde und auf den XML-Bibliotheken des GNOME-Projektes basiert, bietet mit der relaxNGValidate()-Methode der DOMDocument-Klasse die für diese Validierung benötigte Funktionalität an. Das folgende Beispiel zeigt ihre Verwendung.

RelaxNG-Validierung mit der relaxngValidate()-Methode

load('Beispiel.xml');

if ($dom->relaxngValidate('Beispiel.rng')) {
print "Beispiel.xml ist eine Instanz des RelaxNG-Schemas aus Beispiel.rng."
}
?>

Sebastian Bergmann, Jahrgang 1978, lebt in Siegburg und studiert Informatik an der Universität Bonn. In seiner Freizeit beschäftigt er sich mit der Entwicklung freier Software. Er ist Mitglied des PHP-Entwicklerteams und Autor bekannter Open Source PHP-Anwendungen wie PHPUnit und phpOpenTracker. In seiner Kolumne Dev. Talk berichtet er für die Leser des PHP Magazins über die aktuellen Entwicklungen rund um PHP.

Links

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -