Interfaces und Class Type Hints. Verbesserte Apache 2 Unterstützung. lighttpd
Interfaces und Class Type Hints
Die Palette der neuen Features der Zend Engine 2, der Compiler- und Executor-Komponente des kommenden PHP 5, ist in den vergangenen Wochen um Schnittstellen (englisch: Interfaces) und so genannte Class Type Hints erweitert worden.
Eine Schnittstelle ist eine vollständig abstrakte Klasse, die nur Namen und die Signaturen der enthaltenen Methoden vereinbart. Schnittstellen werden genutzt, um einer Klasse unterschiedliche Rollen oder Sichten zuzuordnen. Eine Klasse kann eine beliebige Anzahl an Schnittstellen über das Schlüsselwort
implements implementieren (siehe Listing 1).
Listing 1 <?php
interface anInterface {
public function doSomething();
}
interface anotherInterface {
public function doSomethingElse();
}
class aClass implements anInterface, anotherInterface {
public function doSomething() {
// ...
}
public function doSomethingElse() {
// ...
}
}
?>
Da die Klasse
aClass aus Listing 1 die Schnittstellen
anInterface und
anotherInterface implementiert, können Objekte dieser Klasse beispielsweise an Methoden übergeben werden, die als Parameter ein Objekt vom Typ
aClass,
anInterface oder
anotherInterface erwarten: all diese Typanforderungen kann ein solches Objekt erfüllen.
Die Forderungen an den Typ eines Parameters können durch die Angabe eines Klassen- oder Schnittstellennamens in der Signatur der Methode erfolgen. Im Gegensatz zu statisch getypten Programmiersprachen erfolgt diese Typprüfung jedoch nicht zum Zeitpunkt der Kompilierung, sondern erst zur Laufzeit. Diese so genannten Class Type Hints ersparen dem Programmierer Schreibarbeit, wie die beiden folgenden Beispiele zeigen. Listing 2 zeigt hierbei eine Typprüfung mit Class Type Hints, Listing 3 zeigt eine Typprüfung mit dem
instanceof-Operator.
Listing 2 <?php
class Vector {
function add(Vector $vector) {
// ...
}
}
?>
Listing 3 <?php
class Vector {
function add($vector) {
if (!($vector instanceof Vector)) {
die('Parameter muss vom Typ Vector sein.');
}
// ...
}
}
?>
Diese Beispiele sind semantisch äquivalent und unterscheiden sich nur in der Art der Typprüfung durch die Class Type Hints bzw. den
instanceof-Operator.
Verbesserte Apache 2-Unterstützung
Für das PHP 4.3.2 Release, das unter anderem über 60 Bugfixes sowie Verbesserungen der Kompatibilität mit 64 Bit-Systemen mit sich bringt, wurde die Unterstützung für den Apache 2 Webserver überarbeitet.
Da die Zend Engine 1, die Compiler- und Executor-Komponente von PHP 4, als Eingabe nur eine Datei, aber keinen Stream, akzeptiert, wurde das Apache 2 SAPI-Modul von der bisherigen Implementierung als Filter auf eine Umsetzung als Handler umgestellt. Das neue Modul arbeitet wesentlich stabiler und performanter als sein Vorgänger.
lighttpd
Mit dem lighttpd-Webserver von Jan Kneschke hat ein weiterer HTTP-Daemon das Licht der Welt erblickt, der für die schnelle Auslieferung vieler kleiner Dateien, wie sie beispielsweise bei Banner- und Chatsystemen anfallen, gedacht ist. Zum Funktionsumfang gehört unter anderem eine lastbalancierende FastCGI-Schnittstelle, über die ein Webserver mehrere PHP-Arbeiterprozesse bedient. Im Vergleich zum thttpd-Daemon, der bislang die Nische der kleinen und schnellen Webserver füllte und unter anderem zusammen mit Sascha Schumanns IRCG zum Einsatz kommt, macht der lighttpd-Webserver einen guten Eindruck: er ist nicht nur schneller als ein Apache mit
mod_php, sondern auch schneller als der thttpd.
lighttpd kann unter Linux, FreeBSD, NetBSD, Solaris und Windows (cygwin) betrieben werden.
Sebastian Bergmann studiert Informatik in Bonn und ist aktives Mitglied der internationalen PHP-Entwicklergemeinde. In seiner Kolumne Dev.Talk berichtet er für die Leser des PHP Magazins über die aktuellen Entwicklungen rund um PHP.