Meine Feature-Wünsche für PHP

So kurz vor Weihnachten schreibe ich heute mal meinen Wunschzettel. Natürlich nicht irgendeinen Wunschzettel, sondern meine größten Wünsche für kommende Features in PHP.

1.) Skalares Type Hinting
Type Hinting für Klassen und Arrays ist bereits seit PHP 5.1 problemlos möglich. Eine weitere Verbesserung wäre zusätzlich noch sklares Type Hinting einzuführen, also Integer und Float-Werte für Funktionsparameter anzugeben.

function calculate(int $x)
{
    var_dump($x);
}
 
calculate("99");
// int(99)

Da PHP aber schwache Typisierung verwendet, wäre es sinnvoll hier keinen Fehler zu werfen, sondern den String in einen Integerwert zu casten. Diskutiert wurde dieses Thema in der PHP-Community bereits ausgiebig, aber ob dieses Feature wirklich umgesetzt wird, steht noch nicht fest.

2.) Annotations
Viele Frameworks (u.a. Flow, Symfony und Doctrine) setzten bereits auf Annotations, die aber zum großen Teil noch selbständig mittels der Reflection-API geparst werden müssen. Eine allgemeingültige Lösung von PHP selbst wäre nicht nur performanter, sondern würde aus den Annotations auch ein echtes Sprachkonstrukt machen. Auch dieses Thema stand in der PHP-Community bereits zur Debatte.

3.) Foreach-else-Konstrukt
Smarty bietet bereits eine Funktion um foreach-else-Blöcke zu bauen, schöner wäre es aber, wenn PHP diese Möglichkeit von sich aus mitbringen würde.

$array = array();
 
// Aktueller Stand:
if(count($array))
{
    foreach($array as $key => $value)
    {
        echo $value.PHP_EOL;
    }
}
else
{
    echo "Keine Datensätze vorhanden.";
}
 
// Und so könnte es zukünftig aussehen:
foreach($array as $key => $value)
{
    echo $value.PHP_EOL;
}
else
{
    echo "Keine Datensätze vorhanden.";
}

Der untere Code ist wesentlich kürzer und lesbarer.
Die Community diskutiert sogar darüber das gleiche Konstrukt auch für for- und while-Schleifen einzusetzen und darüber hinaus die Abfragen noch mit elseif zu erweitern. Ich wäre allerdings schon mit der einfachen foreach-else Variante sehr zufrieden.

Bleibt abzuwarten welche Features sich in den kommenden Releases von PHP durchsetzen werden. Zumindest die oben beschriebenen Features wären von meiner Seite aus die meistgewünschten.

Zukünftige Features in PHP 5.4 / PHP 6

Heute wage ich mal einen Blick in die Zukunft von PHP. Demnächst erscheint eine erste Alpha-Version von PHP 5.4 mit einigen neuen Features. Ein paar der wichtigsten neuen Features möchte ich nun vorstellen. Ob tatsächlich alle der hier aufgeführten Features mit dem Release von PHP 5.4 fertig werden oder ob diese nicht für PHP 6 aufgeschoben werden, steht noch in den Sternen.

Type Hinting

Type Hinting ist eines der am meisten gewünschten Features in PHP. Dabei wird in der Parameterangabe von Funktionen und Methoden auch der Variablentyp mit übergeben. Ob und in welcher Form dieses Feature in einer der zukünftigen PHP Versionen erscheinen wird, muss noch diskutiert werden. Problematisch ist dabei u.a. das Verhalten, wenn ein falscher Typ angegeben wird. Soll ein Fehler ausgegeben werden oder wird die Variable einfach umgewandelt.

function addiere(int $x, int $y)
{
	return $x + $y;
}
 
var_dump(addiere("9", "1"));

Array dereferencing

Mit dieser Funktion lassen sich Array-Angaben direkt hinter einem Funktionsaufruf ausführen.

function getAnyArray()
{
	return array("Apfel", "Birne", "Banane");
}
 
echo getAnyArray()[2]; // Ausgabe: Banane

Aus meiner Sicht ein super nützliches Feature, weil man sich dadurch das Zwischenspeichern in ein Variable und damit eine Zeile Code sparen kann.

UTF-8 / UTF-16

Hier sind sich die PHP-Entwickler noch nicht ganz einig. Man möchte, dass die interne String-Behandlung mit einer der modernen Zeichenkodieriung wie UTF-8 oder UTF-16 arbeitet, aber das bringt viele Probleme mit sich. Außerdem steht noch offen welche Zeichenkodierung verwendet wird. UTF-8 ist zum gängigen Standard geworden, UTF-16 dagegen würde die Ausführung verlangsamen, weil der Speicherverbrauch größer wird.

Traits (Mehrfache Klassenvererbung)

Mit Traits können Klassen von mehreren Elternklassen die Funktionalitäten erben. In moment lässt sich über extends immer nur eine Klasse erweitern.

Hier mal ein Traits-Beispiel:

trait PKW
{
	public function getGeschwindigkeit()
	{
		return 'xxx';
	}
}
 
abstract class Auto
{
	public function getKmStand()
	{
		return 'xxx';
	}
}
 
class Limousine extends Auto use PKW
{
	// ...
}
 
$meinAuto = new Limousine();
echo $meinAuto->getGeschwindigkeit();
echo $meinAuto->getKmStand();