
PHP Programmierung aus Duisburg
Neue Array Funktionen für PHP 5.4 in der Übersicht
Es gibt in der aktuellen Version von PHP eine neue Möglichkeit Arrays anzulegen.
Eindimensionales PHP Array
$array = ['foo','bar'];
bisherige Schreibweise
$array = array(‘foo’,'bar’);
Mehrdimensionales Array
$array = [
'value1' => 'This is value1',
'array2' => ['foo','bar']
]
Die Art der Schreibweise ist sehr der von Java Skript angelehnt. Sie stellt eine gute Vereinfachung dar und ich denke das es in Zukunft auch so eingesetzt wird. PHP ist schon immer sehr großzügig mit seiner Syntax umgegangen und wird deshalb auch gerne als „Code Bitch“ bezeichnet. Natürlich gibt es für den Programmierer immer Vor- und Nachteile eines bestimmten Programmierstils. Funktionstüchtiger Quellcode muss noch lange nicht sauber programmiert sein. Zudem gibt es sehr viele Programmierer, die sich durch Try and Error als Autodidakten ihr Wissen angeeignet haben und noch nicht einmal mit einem anderen Programmierer gemeinsam an einem Projekt gearbeitet haben. Es gibt viele unterschiedliche Programmierstile, die in diesem Artikel nicht weiterbehandelt werden. Ich gehe hier ausschließlich auf die Neuerungen von PHP 5.4 ein.
Array Handling in PHP 5.4
echo explode(‘:’,'foo:bar:foobar’)[1];
Ausgabe:
bar
Das ist eine neue Möglichkeit direkt ein Array zu erzeugen und darauf zuzugreifen.Das war bisher nur mit einer Hilfsvariablen möglich.
Bisheriges Array Handling
list($wert1, $wert2, $wert3) = explode(‘:’,'foo:bar:foobar’);
echo $wert2;
Ausgabe
bar
Natürlich kann das Beispiel auch ohne die list()-Funktion arbeiten und die explode()-Funktion direkt einem Array zuweisen werden.
Es gibt jetzt auch noch die Möglichkeit Rückgabewerte von Funktionen direkt als Array anzusteuern.
function foo()
{
$return = ['foo','bar'];
}
echo foo()[1];
Ausgabe
bar
Sicherlich ist hilfreich bei „Quick and Dirty“ Lösungen immer solche kurzen Code Snippets zu verwenden. Was die Übersichtlichkeit der Programmierung und die Schnelligkeit der Anwendung angeht ist diese Schreibweise sicherlich nicht sehr hilfreich. Aber vielleicht ist es auch nur eine Gewohnheitssache. Wenn man ein zweites oder drittes Mal auf den Code schaut ist es schon besser lesbar. Die Variable $foo, die man normalerweise nutzen würde, mit $foo = foo(); oder gar einem $fooreturn = foo(); zeigt schon deutlich wo die Stärken der neuen Schreibweise liegen.
Traits in PHP 5.4 verwenden
In einem Trait können Methoden geschrieben werden, die nachher in mehreren Klassen verwendet werden. Im Grunde kann man es als eine ausgelagerte Methode betrachten. Dabei dürfen verschiedene Traits keine Methoden mit gleichem Namen enthalten. Das führt direkt zu einem Fatal Error. Ergänzend gibt es hier auch die Magic Constant __TRAIT__ für die Ausgabe des Namens.
Tutorial zu Traits in PHP 5.4
trait neueTrait
{
public function ausgabe_a()
{
echo ‘This is a test’;
}
}
class ersteKlasse
{
use neueTrait;
public function ausgabe()
{
$this->ausgabe_a();
}
}
class zweiteKlasse
{
use neueTrait;
public function ausgabe()
{
$this->ausgabe_a();
}
}
$erste = new ersteKlasse();
$erste->schreibe();
Ausgabe
This is a test
$zweite = new zweiteKlasse();
$zweite->schreibe();
Ausgabe
This is a test
Neue Schreibweise in PHP 5.4
$schreibe = ‘schreibe’;
$zweite->$schreibe();
Ausgabe
This is a test
Durch Traits gibt es also die Möglichkeit Methoden in verschiedenen Klassen wieder zu verwenden. Das ist nichts Neues, aber von der Syntax her ein wenig einfacher zu schreiben und zu lesen. Konkrete Anwendungsfälle wären beispielsweise die Logik zur Einbindung einer Datenbankinstanz oder auch bestimmte Sicherheitsfunktionen, die beispielsweise ein Zugriff nur für bestimmte IP Adressen auf die Klasse erlauben. Aber es ist nichts wirklich neues. Konsequent angewendet kann es allerdings schon Übersicht für die einzelnen Programmierer bringen, da Traits natürlich an einer ausgelagerten Stelle gebündelt werden können.
Standard Charset in PHP 5.4 als UTF8
Endlich wurde das Standard Charset UTF8 umgestellt. Seit der PHP Version 4.0 wurde der Header Content Type ISO-8859-1 mitgesendet. Das ist ein wichtiger und in meinen Augen längst überfälliger Schritt. Dass die Applikationen UTF8 verwendet muss also nicht mehr extra in einem HTML Meta Tag angegeben werden.
E_ALL jetzt auch mit E_STRICT in PHP 5.4
Dadurch enthält E_ALL jetzt wirklich alle Fehler, Warnungen und Hinweise.
Binärdarstellung von Zahlen seit PHP 5.4
Eine neue Repräsentation von Zahlen ist in PHP verfügbar. Ab sofort können neben Hexadezimal-, Dezimal- und Okatlzahlen jetzt auch Zahlen in der Form Ob (Binärzequenz) instanziert werden.
Beispiel
echo Ob10;
Ausgabe
2
PHP 5.4 Neuerungen wie beim Update Probleme machen können
In der neuen Version wurde in PHP richtig aufgeräumt. Dadurch ist alles bedeutend schneller geworden, aber die Abwärtskompatibilität ist leider nicht mehr so gut gewährleistet wie bei anderen Updates. Ich liste hier einmal auf welche Änderungen in meinen Augen am wichtigsten sind.
- Abgeschafft
- safe mode
- register_globals
- magic_quotes_gpc
- session_register()
- session_is_registered()
- session_unregister()
- Hinzugefügt
- Anführungszeichen aus einem Formular oder Cookie werden automatisches escaped
- short open tags sind immer aktiviert
Das die Short Open Tags immer aktiviert sind ist sehr hilfreich, gerade bei der Verwendung von Templates und PHP Frameworks mit dem Model-View-Controller (MVC) Prinzip. Dadurch lassen sich jetzt alle Ausgaben kurz mit <?=$value?> schreiben. Wenn die entsprechend kurze Schreibweise in der php.ini die Datei nicht eingeschaltet war musste man bisher folgende Schreibweise nutzen <?php echo $var; ?>. Auf die Methoden einzelner Klassen und deren Attribute kann jetzt auch direkt bei deren Instanzierung zugegriffen werden. (new klassenname)->methode.
Upload Prozess transparenter in PHP 5.4
Mit dem INI-Eintrag session.upload_progress.name = meinName ist es ab sofort möglich detaillierte Informationen über den gesamten Uploadprozess zu erhalten. Hierfür kann die superglobale Variable $_SESSION['upload_progress_meinName'] genutzt werden. Voraussetzung hierfür ist es natürlich immer php.ini die Direktive session.upload_progress.enabled = on zu setzen.
Neue Zeitmessung in PHP 5.4 direkt auf den Request möglich
Für Freunde von High Performance Anwendungen ist dieser Schritt sehr hilfreich. Ab sofort ist es möglich einen mit Request Timer anzusteuern, der die Mikrosekunden genaue Zeit enthält, die genau sagt wann der Request beim Server eingegangen ist. So lassen sich jetzt sehr genaue Messungen über die Ausführungen einzelner Applikationen vornehmen.
Beispiel
echo ‘Dauer Seitenausgabe’.(mictrotime(true) – $_SERVER['REQUEST_TIME_FLOAT']).’ Sek’;
Integrierter Webserver in PHP 5.4
Die neue PHP Version bringt standardmäßig einen Webserver mit, der über die Kommandozeile gestartet werden kann. Es ist also nicht benötigte nur einen Apache Server zu betreiben. Ich geh doch mal davon aus dass jeder der sich mit PHP Programmierung beschäftigt einen im PC-Server nutzt und das ist ja auch nicht schwierig ist mit der Entwicklungsumgebung XAMPP einen solchen zu betreiben. Die PHP Entwickler selber weisen zusätzlich darauf hin dass ihr integrierter Webserver nicht für den Livebetrieb geeignet ist.Hier ist trotzdem eine kleine Übersicht wie man diesen Server nutzen kann.
Unter Windows
Verzeichnis anlegen
D:\development\htdocs
Datei hinzufügen
router.php
Diese Datei wird beim Aufruf an den Webserver gelesen. Liefert das Skript den Wert false bei der Verarbeitung, wird die Datei auf die der Request ausgeführt wurde ohne Verarbeitung an den Browser gesendet.Hier sieht man deutlich wie rudimentär der Webserver arbeitet.
Datei hinzufügen
index.php
<?php
echo ‘This is a test’;
?>
Jetzt kann der Webserver auch schon gestartet werden. Gehen Sie über die Kommandozeile auf ihre PHP Umgebung. Im Falle von XAMPP kann das so aussehen.
D:\development\xampp
Start des Webservers über die Kommandozeile
php -S 0.0.0.0:8080 -t
D:\development\htdocs
D:\development\htdocs\index.php
Der Webserver ist jetzt gestartet und bleibt solange an, wie das Kommandozeilenfenster geöffnet ist. Gibt man jetzt in seinem Browser http://localhost:8080/index.php erhält man seine Ausgabe.