Froscon 2008 – PHP 5.3
Johannes Schlüter, seines Zeichens Release Manager bei PHP 5.3 und im normalen Leben bei Sun beschäftigt. Wer könnte also besser erzählen, was es alles neues in PHP 5.3 zu erleben gibt. Als erstes wurde natürlich verkündig, dass PHP 4 „deprecated“ ist und nicht mehr verwendet wurden soll. Ok das war nicht neu, ist aber trotzdem immer wieder schön zu hören. Obwohl schon sehr viel über 5.3 geschrieben wurde und wahrscheinlich die Hälfte von euch jedes Detail kennt, werde ich trotzdem die wichtigsten Neuerungen zusammenfassen.
Namespaces
Nach langen Diskussionen scheint sich die PHP Gemeinde endlich geeinigt zu haben, wie denn die Verwendung von Namespaces auszusehen hat und ich glaub, ich kann mit der Entscheidung leben. Obwohl ich die Autoload Methode wirklich schätze und ich auch finde, dass sie eine gute Idee ist, helfen Namesspaces einem endlich Klassennamen möglichst kurz zu halten, ohne dabei irgendwelche Konflikte herbei zu schwören. Wer hier gerade keine Ahnung hat, von was ich rede, den kann ich beruhigen, ein Artikel über Namespaces wird in kürze folgen, sobald ich selbst ein wenig mit rumgespielt habe. Ein kleines Beispiel kann denke ich trotzdem nicht schaden:
<?php
require 'MyProject/Db/Connection.php';
use MyProject::DB;
use MyProject::DB::Connection as DbConnection;
$x = new MyProject::DB::Connection();
$y = new DB::connection();
$z = new DbConnection();
DB::connect();
?>
<?php
namespace MyProject::DB;
const
CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */ }
?>
Die Beispiele habe ich einfach rotzfrech von der php.net Dokumentation genommen.
goto
Lange Zeit von mir befürchtet, jetzt ist es endlich so weit. Die Einführung von goto ist nun an ihrem Ziel. Eigentlich sollte hier hier gar nichts schreiben, da ich glaube, dass man goto soweit wie möglich vermeiden sollte. Es gibt nur eine Handvoll Situationen in dem man goto wirklich nicht vermeiden kann, ohne einen riesigen Umweg zu fahren. Für diese Fälle ist es auch ok! Ansonsten sehe ich keinen Grund, da es neue Chance mit sich bringt auf einer ganz neuen Ebene zu frikeln. Für die OOP, die ich ja gerne betreibe, ist dieses neue Feature auch nicht nützlich. Naja wir werden sehen was passiert, ich prognostiziere nichts gutes. Aber vielleicht gehe ich auch in den Compiler- oder Parserbau und bin dann der größte Fan dieses Sprachkonstruktes.
Error Level
In der neuen PHP Version wurde auch ein Error Level eingeführt. E_DEPRECATED. Dieser Fehler wird immer dann geworfen (sorry Olaf, ich weiß Fehler wirft man nicht), wenn eine Funktion aufgerufen wird, die nicht mehr up-to-date ist und man sie eigentlich nicht mehr verwenden sollte, da sie in einer der nächsten PHP Versionen nicht mehr unterstützt wird.
Meiner Meinung nach ist dies eine gute Idee, da es so wohl um einiges einfacher wird zu einer neuen Version zu migrieren, da man es so peu à peu bewerkstelligen kann. Natürlich sind hier auch die Macher von PHP gefragt, wenn sie nicht rechtzeitig eine Funktion als veraltet markieren, dann hilft der neue Fehlerlevel wenig. Also einfach mal abwarten, was passiert.
phar Support
Phar ist die PHP Antwort auf das java Archivformat JAR. Ab 5.3 unterstützt PHP nativ dieses Dateiformat. Dank eines Streamwrappers kann man so direkt Dateien ansprechen, die mit phar komprimiert wurden.
<?php
file_get_contents(‚phar:/pfad/zum/pharfile.phar/mydata‘);
require ‚phar:/pfad/zum/
pharfile.phar/myscript.php';
?>
Late static binding
Da ich ja bereits im Artikel über Sebastian Bergmanns Vortrag „Understanding the PHP Object Model“ über diese Neuerung gesprochen habe, bin ich einfach mal so frei und lasse dieses Kapitel hier aus.
Hallo Nils!
Ich kann nur sagen „Weiter so!“. Deine Seite hat es schon in meine Favoriten geschaft.
Hab selber erst seit 2002 mit PHP zu tun und OOP war(ist?) für mich „irgendwas Böses“. 😉
Lumi
Mittlerweile ist man ja schlauer, bzw. hat das System verändert, zu meinen Ungunsten:
use MyProject::DB::Connection as DbConnection;
wird zu
use MyProject\DB\Connection as DbConnection;
und
namespace MyNameSpace::Subnamespace;
wird zu
namespace MyNameSpace\Subnamespace;
Mfg