Open Source im professionellen Einsatz
Linux-Magazin 01/2016
353

Kulturschock

Die wohl augenfälligste Neuerung in PHP 7 bringt Typdeklarationen in Funktionen zum Einsatz. Auf Basis des zugleich rückwärtskompatiblen Mechanismus kann der PHP-Anwender die Datentypen sowohl der Aufrufparameter als auch des Rückgabewerts einfordern, wie es Listing 6 demonstriert. Die Anweisung »declare(strict_types=1)« in Zeile 2 aktiviert die Typdeklaration. Der »...« -Operator vor dem Parameter »$ints« bugsiert in Zeile 4 des Listings alle Aufrufparameter in das Feld »$ints« . Die Typdeklaration gilt dabei für jeden einzelnen Aufrufparameter.

Listing 6

Striktes Einhalten von Datentypen

01 <?php
02 declare(strict_types=1);
03
04 function sum(int ...$ints): string {
05  return array_sum($ints);
06 }
07
08 echo sum(1, 2, "3");
09 echo sum(1, 2, 3);
10 ?>

Fehlte Zeile 2, würde Zeile 4 die Aufrufe der Funktion »sum()« in den Zeilen 8 und 9 mit Hilfe der Funktion »array_sum()« wie gewohnt jeweils zum Rückgabewert »6« addieren. Dank Zeile 2 scheitern beide Aufrufe. Stattdessen generiert der Code ab Zeile 4 für die Zeilen 8 und 9 eine Exception vom Typ »TypeError« . Auf Code, den PHP über »require« oder »include« einbindet, wirkt »strict_types« wechselseitig.

Wegwerfgesellschaft

Mit Hilfe anonymer Klassen generiert PHP 7 Objekte zum einmaligen Gebrauch (Listing 7). Offenbar sind die gemeinsamen Jahre mit Javascript nicht spurlos vorübergegangen. Zeile 6 erzeugt ein leeres Objekt aus der anonymen Klasse »{}« . Analog zu anonymen Funktionen brauchen auch anonyme Klassen keinen Namen. Der Entwickler gibt sie in einer Zuweisung direkt nach dem »new« -Operator an.

Listing 7

Anonyme Klassen

01 <?php
02 interface Calculator {
03  public function result(float $value);
04 };
05
06 $Prototype = new class {};
07
08 $Prototype->calculator = new class implements Calculator {
09  public function result(float $value) {
10    return 2*$value;
11  }
12 };
13
14 echo $Prototype->calculator->result(2);
15 ?>

In Zeile 8 lässt sich beobachten, wie PHP 7 das leere Objekt »$Prototype« zur Laufzeit um die Eigenschaft »calculator« erweitert. Sie speichert die Instanz eines Objekts, welches das Skript zuvor mit der anonymen Klasse instanziert hat (Zeile 8). Diese Klasse implementiert das Interface ab Zeile 2, Zeile 9 definiert die geforderte Funktion »result()« . Die Funktionstüchtigkeit des Konstrukts beweist der Ausdruck in der letzten Zeile des Listings, der den Wert 4 ausgibt.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Pony

    Die statisch getypte und objektorientierte Programmiersprache Pony trabt auf eher abseitigen Pfaden, um mit sicherem und hochperformantem Code für nebenläufige Anwendungen ihre Fans zu beglücken.

  • ECMA-Script 6

    Der kommende Sprachstandard ECMA-Script 6 beseitigt viele historische Javascript-Eigenheiten. Die bisher vermissten Klassen, Module und Default-Parameter erleichtern das Coden vor allem den Umsteigern von anderen Programmiersprachen.

  • React

    Vom Unternehmen Facebook kommt das quelloffene Javascript-Framework React, das Weboberflächen geschickt mit Datenschätzen verknüpft. Insbesondere die Renderfunktion macht sich dabei nützlich.

  • Squirrel

    Wer eine Skriptsprache mit schlankem Interpreter sucht, der sich möglichst einfach in Anwendungen einbetten lässt, greift schon fast blind zu Lua. In deren Schatten wartet jedoch schon länger ein praxiserprobter Konkurrent namens Squirrel. Dieser Artikel stellt die Open-Source-Sprache in einem Crashkurs vor.

  • Node.js und Redis

    Javascript auch auf dem Server nutzen, das verspricht das Webserver-Framework Node.js und bietet zahlreichen Erweiterungen und viele Funktionen, aber auch hohe Performance. Dieser Artikel zeigt, wie sich im Verbund mit der Datenbank Redis eine einfache und schnelle Buchungsapplikation entwickeln lässt.

comments powered by Disqus

Ausgabe 10/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.