Einblick in PHP 7

#news #php #technik

Alle reden von PHP 7: neue Features, bessere Performance und ein Release-Datum, das bereits für Ende dieses Jahres angesetzt ist. Das macht Lust auf mehr und weckt das Bedürfnis die eigenen Seiten und Plugins mit der neuen Version von PHP zu testen.

Im folgenden Beitrag installieren wir die Entwicklerversion von PHP 7 (inkl. einer MySQL-Datenbank) unter Vagrant, um in der virtuellen Entwicklungsumgebung anschließend die neuen Features von PHP testen zu können.

 

Installation von PHP 7 mit Virtualbox & Vagrant

Wer bereits Virtualbox mit Vagrant oder Abwandlungen wie Varying Vagrant Vagrants (VVV) nutzt, hat bei der Installation leichtes Spiel, da die vorkonfigurierte Box nur noch zur virtuellen Umgebung hinzugefügt werden muss.

Virtualbox mit PHP 7

Virtualbox mit PHP 7

Dafür kann beispielsweise das Vagrant Image von Rasmus Lerdorf verwendet werden:

$ vagrant box add rasmus/php7dev
$ vagrant init rasmus/php7dev
$ vagrant up

(Wie zuvor beschrieben, wird hierfür Virtualbox und Vagrant (mind. Version 1.5) benötigt.)

Selbstverständlich kann PHP 7 auch direkt von PHPNG oder über Tools wie Docker installiert werden.

 

Setup von PHP 7 unter Vagrant

Die Box von Rasmus Lerdorf beinhaltet bereits einen Großteil des benötigten Setups. Entsprechende Anpassungen können in der Datei php7dev.yaml vorgenommen werden; dies betrifft in erster Linie die für die virtuelle Umgebung freigegebenen Ordner also folders, um lokal drauf zugreifen zu können:

folders:
    - map: /Users/codesixtyfour/php7dev/www
      to: /var/www/default

Das Setup sollte nach dem Start von Vagrant auch in Virtualbox unter Settings » Shared Folders zu sehen sein.


Auch eine MySQL-Datenbank kann hinzugefügt werden. Wenn wir beispielsweise davon ausgehen, dass wir WordPress unter PHP 7 testen möchten, kann eine entsprechende Datenbank in die Konfigurationsdatei eingetragen werden:

databases:
    - wp

Zur Info: Die Standard-Zugangsdaten der MySQL-Datenbank sind folgende:

  • Host: localhost
  • Datenbank: wp
  • Benutzer: vagrant
  • Password: vagrant

Abschließend kann noch die in der Konfiguration hinterlegte ip über die eigene /etc/hosts mit einer Domain aufgelöst werden:

# PHP 7
192.168.7.7   php7.dev

Nach dem Booten von Vagrant können die Inhalte unter http://php7.dev aufgerufen werden.

 

Testing PHP 7

Loggt man sich nun per SSH in Vagrant ein kann man das Setup mit php -v prüfen:

vagrant@php7dev:~$ php -v
PHP 7.0.0-dev (cli) (built: May 25 2015 16:34:33) (DEBUG)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

Damit stehen ohne Einschränkung alle Funktionen von PHP 7 zur Verfügung.

 

Neuheiten in PHP 7

Combined Comparison Operator

Das wohl schon jetzt am häufigsten erwähnte neue Feature ist sicherlich der Combined Comparison Operator, auch Spaceship Operator genannt, der die logischen bzw. relationalen Operatoren erweitert. Die Syntax $a <=> $b gibt 0 zurück, wenn beide Ausdrück gleich sind; ist $a größer beträgt der Rückgabewert 1; -1 wenn $b größer ist.

Ein einfaches Beispiel für den Spaceship Operator würde demnach folgendermaßen aussehen:

echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

Weitere, komplexere, Beispiele sind im entsprechenden RFC zu finden.

 

Null Coalesce Operator

Der gerne genutzte Ternary Operator benötigt immer den Zusatz mit isset(), um im Fall der Fälle keine E_NOTICE zurückzugeben. Der neue Null Coalesce Operator löst dieses Problem sehr elegant:

// Ternary Operator mit isset()
echo isset( $_GET['name'] ) ? $_GET['name'] : 'default';

// Null Coalesce Operator in PHP 7
echo $_GET['name'] ?? 'default';

Weitere Anwendungsbeispiele sind im entsprechenden RFC zu finden.

 

Scalar Type Declarations

Type Declarations für Basic Scalar Types wie string, int, float und bool können nun erzwungen werden:

function add( int $a, int $b ) {
    return $a + $b;
}

Die Rückgabe erfolgt in diesem Fall als int, da keine spezielle Deklaration angegeben wird:

var_dump( add( '1', 2 ) ); // int(3)

Ansonsten kann über strict_types=1 eine strengere Regelung angegeben werden:

declare( strict_types=1 );
var_dump( add( '1', 2 ) ); // Fatal error: Uncaught TypeException

Weitere Infos sind ebenfalls im RFC zu finden.

 

Weitere neue Funktionen & Änderungen

PHP 7 bringt noch etliche weitere neue Funktionen mit, die man sich auf jedem Fall genauer ansehen sollte. Insbesondere anonyme Klassen, das Gruppieren von use Deklarationen und Parameter für session_start() werden die Entwicklung deutlich vereinfachen.

Aber auch die Änderungen sollten nicht unerwähnt bleiben: So erzeugt der Gebrauch des PHP 4 Konstrukturs eine Warnung E_DEPRECATED und die alternativen PHP Tags wurden bei der Gelegenheit gleich ganz entfernt.

Zur Lektüre empfiehlt sich die PHP 7 Referenz von Thomas Punt, in dem alle Features und Updates im Detail beschrieben werden.

 

PHP 7 Performance

Die Infografik von Zend verdeutlicht den beindruckenden Performance-Boost von PHP 7. Insbesondere große PHP Applikationen und Content Management Systeme wie Drupal oder WordPress werden davon profitieren, wie Rasmus Lerdorf in seinem Vortrag Speeding up the Web with PHP 7 im April 2015 aufgezeigt hat:

Wordpress PHP Performance

Anfragen/Sekunde bei WordPress 4.1.1 (Quelle)

 

Weiterführende Links

  • PHP 7 Reference
    Eine ausführliche Liste mit Neuerung, Updates und Infos zu PHP 7.
  • What to Expect from PHP 7: Teil 1 & Teil 2
    Zweiteiliger Blogpost von Davey Shafik mit weiteren Details zu PHP 7.
  • @official_php
    Release- und News-Stream von PHP.net

Gerne können weitere Links, Infos oder eigene Gedanken in den Kommentaren unter diesem Beitrag diskutiert werden.

 

3 Kommentare

  1. Ab MAMP 3.5 (kostenlose Version) kann man in den Einstellungen PHP 7 als Standard Version auswählen:
    » https://www.mamp.info/en/documentation/

Ihr Kommentar