Facebook
Twitter
Google+
Kommentare
0

02.12. PHP 5.3 Features in real life

Die Veröffentlichung von PHP 5.3 vor rund 2 Jahren brachte dem PHP-Entwickler sinnvolle Neuerungen und Verbesserungen. Dazu zählen in erster Linie Namespaces, Late static binding und Closures (anonyme Funktionen).
Viele Verbesserungen hat PHP 5.3 vor allem aber unter der Haube erfahren. Das neue /PHP/5.3 ersetzt libmysql mit der eigenen, nativen Implementierung mysqlnd und hat auch den Garbage Collector verbessert.

Das sind nur einige wenige Dinge, die mit PHP 5.3 sinnvoll verbessert und erweitert wurden. Auch gibt es ein Feature, dem der OOP-Entwickler mit einer gewissen Hassliebe entgegen steht: Jump Labels, auch “goto” genannt. Die Verwendung von goto ist in der heutigen PHP-Community nicht gerade sehr beliebt. Die Ursache: Die klassische, objektorientierte Programmierung bringt gegenüber einer Strukturierung seiner Anwendung mittels goto wesentliche Vorteile, wie Sichtbarkeiten, Vererbung etc.

PHP 5.3 bringt insgesamt jedoch viele erfreuliche Neuigkeiten mit von denen sich einige bereits sehr bewährt haben und bei Neuentwicklungen oder Refactorings auf jeden Fall in Erwägung gezogen werden sollten.


Namespaces

Namespaces dienen dazu, verschiedene Funktionalitäten wie beispielsweise Klassen in so genannte Namensräume zu kapseln und diese somit zu gruppieren. Man stelle sich das anhand einer klassischen Verzeichnisstruktur vor. Seine Dateien (PHP-Klassen) legt man in verschiedenen Verzeichnissen (Namespaces) ab und kann diese später laden und einbinden.

Beispiel:
namespace MyProject/Car

class MyProject/Car {
// …
}

use MyProject/Car as Car;
$car = new Car();

Mit dem Schlüsselwort use importiert man Namespaces in einen anderen um die enthaltenen Funktionen und Klassen nutzen zu können.

Doch was bringen Namespaces?
Der Vorteil in Namespaces ist vor allem die Flexibilität in der Verwendung (Alias) und der Wegfall von Namenskonflikten. Jede Datei sowie jede Klasse kann also den selben Namen haben, solange diese in verschiedenen Namespaces liegen. Die Verwendung von Namespaces verbessert die Lesbarkeit sowie die Organisation der eigenen Klassen, da diese analog zu Ordnerstrukturen definiert sind. Somit sind auch kürzere Namen für Klassen möglich, da die organisatorische Beschreibung bereits im Namespace erfolgt.


Late static binding

Mit der Einführung von Late static binding wird nun die Möglichkeit geboten, eine aufgerufene Klasse im Kontext statischer Vererbung zu referenzieren. Das hört sich auf zu Beginn erstmal kompliziert an, lässt sich aber folgendermaßen erklären:

[php]
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
echo self::who();
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test(); // Output: A

Die Methode self::who() referenziert auf seine eigene Methode who(). Das Schlüsselwort self referenziert also nicht den Kontext bei statischer Vererbung. Es gibt somit keine Möglichkeit, auf die Methode who() der Klasse B zuzugreifen, ohne die Methode test() ebenfalls zu überschreiben.
Um diesen Umstand zu korrigieren, wurde mit PHP 5.3 Late static binding mit dem Schlüsselwort static eingeführt, welches den Kontext berücksichtigt.

Die Methode test() wird verändert:

public static function test() {
echo static::who();
}
B::test(); // Output: B

Zur Erläuterung: self bindet sich bereits beim interpretieren des Codes an die Klasse, static erst bei der Ausführung.
Die Verwendung von Late static binding hilft dabei, Quellcode zu sparen, da Funktionalität bereits in eine Basis-Implementierung (abstract class) geschrieben werden kann.

namespace Database\Editor;

interface EditorInterface {
public function getTableName();
}

abstract class Table implements EditorInterface {

public function delete($id) {

$sql = ‘DELETE FROM `‘ . static::getTableName() . ’`

WHERE id=’ . $id;

$stmt = $this->getDb()->execute($sql);

return $stmt;

}

}

class User extends Table {
public function getTableName() {
return ‘user’;
}
}

$table = new User();
$table->delete(12 /* user id */);


Abschließend

PHP 5.3 bringt auch “unter der Haube” viele Verbesserungen, Bugfixes und Performance improvements mit. Einige Bibliotheken wie phar (PHP Archive), fileinfo oder intl sind nun auch nativ mit dabei und müssen somit nicht mehr extern eingebunden werden.
Damit sei PHP 5.3 vor allem für neue Projekte sehr empfohlen.

Über den Autor

Mayflower Blog

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen