Sterling Hughes hat vor einigen Tagen in New York PHP5 vorgestellt. PHP wird mit dieser Version nun endlich erwachsen. Es unterstützt richtige objektorientierte Programmierung, man kann aber trotzdem noch ähnlich wie in PHP 4 programmieren. Mit der neuen Version schreibt sich PHP ähnlich wie das trotzdem noch viel komplexere Java. Die meisten Neuerungen werden den „normalen“ PHP-Entwickler nicht betreffen, sie lohnen sich nur bei sehr umfangreichen Projekten.
Nun zu den Neuerungen in PHP5:
Namespaces:
Namespaces haben in PHP5 eigentlich nur eine Aufgabe, die hilft, die Übersicht über den Quellcode zu verbessern – wirkliche Funktionalität bieten sie nicht. Man kann jetzt die Klassen in Namespaces stecken, um eine Art Verzeichnisbaum der Klassen aufzubauen. So muss man nicht immer alle Klassen etwa
$e = new LanguagesPerlExecute();
Nennen, man kann stattdessen schreiben
$e = new Languages

erl::Execute;
Hier ein Beispiel:
<?php
namespace Languages

erl {
class Execute {
function statement($cmd) {
$cmd = escapeshellcmd($cmd);
system("echo $cmd | perl");
}
}
class Insult {
function oneLiner() {
echo "Perl is soo ugly, even ";
echo "Microsoft can't embrace it";
echo "
<br />
";
}
}
}
$e = new Languages

erl::Execute;
$e->statement("print 'Hello World!'");
echo "
<br />
";
$i = new Languages

erl::Insult;
$i->oneLiner();
?>
Exception handling:
PHP5 bietet ein stark verbessertes Exception Handling. Das braucht man zum Beispiel, wenn man angepasste Fehlermeldungen an den Benutzer schicken will. Neu hinzugekommen ist auch das aus C++/Java bekannte try {} catch{}. In den try-Block schreibt man alle Anweisungen, die normal ausgeführt werden sollen. Wenn aber die Ausführung einer Anweisung fehlschlägt, zum Beispiel weil eine Datei nicht gefunden werden kann, werden statt den Befehlen im Try-Block die Befehle im Catch-Block ausgeführt.
So kann man den Code übersichtlicher halten und Fehlermeldungen viel leichter Abfangen oder Vermeiden. Das ganze kann z. B. so funktionieren:
<?php
define('NUM', 10);
try {
if (NUM < 20) {
throw new Exception(NUM . " is too small!");
}
} catch (Exception $e) {
echo $e->getMessage();
echo "
<br />
";
}
?>
Um eigene Fehlermeldungen zu “throwen” kann man mit Hilfe der Objektorientierten Programmierung eine eigene Fehlerklasse erzeugen.
Object Orientation:
PHP5 hat eine neue Objektorientierte Programmierung spendiert bekommen. Dazu zählen im Wesentlichen folgende neue Features:
- Konstruktoren/Destruktoren
- Zugriffskontrolle auf Variablen der Klasse mittels private/protected/public-Schlüsselwörtern (wie auch in C++/Java)
- Statische Variablen/Funktionen in Klassen
- final-Keyword: Mit dem Keyword final kann man Variablen „finalisieren“. Das bedeutet, dass man diese nach der Definition nicht mehr ändern kann, ähnlich wie Konstanten
Definition: final public $name = „value“;
- Objekte/Funktionen überladen
- Abstrakte Funktionen (Funktionen ohne Inhalt, die z. B. nach einer Vererbung überschrieben werden können)
- Objekte „klonen“:
<?php
class sheep {
var $name;
}
$start = new sheep;
$start->name = "Dolly";
$new = $start->__clone();
$new->name = "Molly";
?>
__autoload()-Funktion
Man kann nun eine Funktion mit dem Namen __autoload() definieren. Diese wird automatisch zu Beginn der Ausführung der PHP-Datei ausgeführt. In dieser Funktion kann man zum Beispiel Funktionsbibliotheken laden, ohne die nicht weitergearbeitet werden kann. Wenn die Ausführung von __autoload() fehlschlägt, wird ein Fehlermeldung an den Client zurückgegeben.
Streaming-Funktion
Man kann jetzt einen Streaming-Server mit PHP5 betreiben.
Beispiel:
<?php
$s = stream_socket_server('tcp://localhost:8080');
while ($client = stream_socket_accept($s)) {
$line = fgets($client);
echo $line;
}
?>
Es gibt noch etliche Neuerungen mehr, als die hier aufgelisteten. Das sind vor allem Sachen, die mit Klassen zu tun haben. PHP5 hat jetzt ein vollständiges objektorientiertes System, wie auch Hochsprachen (C++/Java) eins haben.
Alles in allem ist PHP5 wesentlich komplexer geworden, vor allem durch die OOP. Für C++/Java-Programmierer ist der Umstieg absolut kein Problem, da viele Sachen sehr ähnlich wie in diesen Sprachen funktionieren. Wer neu ist, sollte die OOP auf später verschieben.