Homepage-Webhilfe Event-Banner

Unterschiede zwischen PHP 5 und PHP 7

geschrieben von Benjamin Jung am 01.09.2018 21:20:15

In diesem Blogbeitrag wollen wir uns damit beschäftigen, welche Unterschiede es zwischen PHP 5 und PHP 7 gibt. Der Blogbeitrag beginnt mit einer kurzen Hintergrundeinführung, gefolgt von den Änderungen, über die neuen Features und Funktionen bis hin zu den entfernten Features und Funktionen.


Hintergrundinformationen

PHP ist eine Skriptsprache, die erstmals 1995 vorgestellt wurde. Mit PHP 3 wurde der komplette Programmkern überarbeitet und der Grundstein für die heutigen Versionen gelegt. Eine weitere wichtige Version wurde mit PHP 5 geschaffen.

Die erste Version von PHP 5 wurde im Sommer 2004 veröffentlicht. PHP 5 brachte hierbei nicht nur performance-technische Verbesserungen, sondern auch einige Erweiterungen. PHP 5 hat jedoch auch innerhalb seiner Hauptversion einige Meilensteine hingelegt. Eine Version mit vielen Änderungen und vor allem auch Erweiterungen war unter anderem die Version 5.3. Bis heute wird auf einer Vielzahl an Servern PHP 5 eingesetzt. Die aktuellste Version von PHP 5 ist PHP 5.6. Für PHP 5.6 ist der aktive Support seit Anfang 2017 eingestellt, doch es werden noch Sicherheitsupdates in unregelmäßigen Abständen veröffentlicht.

Als Nachfolger von PHP 5 gilt PHP 7, dessen erste Version Ende 2015 veröffentlicht wurde. Ursprünglich war PHP 6 als Nachfolger von PHP 5 geplant, der PHP 5 schon relativ schnell ablösen sollte. Auf Grund von Problemen bei der Implementierung wurde die Entwicklung jedoch 2010 eingestellt. Im Jahr 2014 wurde dann entschieden, dass PHP 7 der neue Nachfolger von PHP 5 werden soll. Die Unterstützung von PHP 7 bei den Hosting-Providern ist in letzter Zeit stetig gestiegen und in der Zwischenzeit sehr hoch. Einige Provider bieten jedoch die Möglichkeit, zwischen PHP 5 und PHP 7 zu wählen.


Änderungen von PHP 5 zu PHP 7

Änderungen an PHP-Funktionen, zu mindestens die, die für den Benutzer direkt sichtbar sind, wurden zwischen den Versionen PHP 5 und PHP 7 so gut wie nicht durchgeführt. Die paar kleinen Änderungen, die durchgeführt wurden, können in der offiziellen Migrations-Dokumentation von PHP nachgelesen werden. Diese sind aber, wie bereits erwähnt, selbst für fortgeschrittene PHP-Programmierer meist nicht von Bedeutung.

Durch Änderungen an der Implementierung von PHP, darunter auch am PHP-Kern, bietet uns PHP 7 jedoch eine deutlich verbesserte Laufzeit (teilweise bis zu über 100%) und einen verminderten Bedarf an Speicherplatz.


Neue Features und Funktionen

In diesem Abschnitt wollen wir einige Features und Funktionen vorstellen, die mit PHP 7 eingeführt wurden.


Operator für Drei-Wege-Vergleich

Oftmals kann es notwendig sein, einen Drei-Wege-Vergleich (engl. three-way comparison) durchzuführen. Benötigt wird dies z. B. bei Vergleichsfunktionen (wie z. B. bei usort(), uksort() und uasort()), die entweder -1, 0 oder 1 als Wert zurückgeben müssen, abhängig davon, ob das Element A kleiner, gleich oder größer dem Element B ist.

Benötigt man eine solche Funktionalität in PHP 5 (oder älteren Versionen), so schreibt man sich hierfür am besten eine eigene kleine Hilfsfunktion:

<?php
function compare($a, $b)
{
    if ($a < $b)
        return -1;
    else if ($a == $b)
        return 0;
    else
        return 1;
}

echo compare(3, 4);
echo "<br />";
echo compare(4, 4);
echo "<br />";
echo compare(4, 3);
?>

In PHP 7 gibt es hierfür den Spaceship Operator <=>. Dieser Operator führt den gleichen Vergleich wie die obige Funktion compare() aus. Der Code sieht dann also wie folgt aus:

<?php
echo 3 <=> 4;
echo "<br />";
echo 4 <=> 4;
echo "<br />";
echo 4 <=> 3;
?>
Vorschau

Operator für Null-Vergleich

Gerade wenn es darum geht, ob ein Formularparameter, welcher über GET oder POST übertragen wurde, gesetzt ist oder nicht, wird oft die Funktion isset() verwendet. isset() überprüft dabei, ob die Variable gesetzt ist und dessen Wert ungleich null ist.

Um eine möglichst kurze Schreibweise zu erhalten, wird deshalb oft der ternäre Operator ? verwendet. Ein geläufiges Beispiel für PHP 5 sieht dann wie folgt aus:

<?php
echo isset($_GET["Benutzer"]) ? $_GET["Benutzer"] : "Gast";
?>

Mit PHP 7 wurde der Null Coalescing Operator ?? eingeführt. Dieser Operator prüft, ob die angegebene Variable existiert und ungleich dem Wert null ist. Ist dies der Fall, so wird der Wert vor dem Operator ?? zurückgegeben, andernfalls wird der Wert hinter dem doppelten Fragezeichen zurückgeben. Das folgende Beispiel ist zu dem obigen äquivalent:

<?php
echo $_GET["Benutzer"] ?? "Gast";
?>
Vorschau

Anonyme Klassen

Bisher mussten Klassen zuerst mit Hilfe des Schlüsselworts class deklariert werden, bevor dann ein Objekt davon instanziiert werden konnte. Mit PHP 7 wurden die sogenannten anonymen Klassen integriert, d. h. es wird einfach nur eine Klasse definiert, die keinen Namen hat, aus der dann ein Objekt instanziiert wird. Bei der Notation werden lediglich die Schlüsselwörter new class gefolgt von der Klassendefinition angegeben. Daraus ergibt sich dann ein sogenanntes anonymes Objekt. In einigen Situationen kann ein solches Konstrukt sinnvoll sein, jedoch lässt sich dies pauschal nicht definieren. Hier ein Beispiel, das die Verwendung einer anonymen Klasse zeigt:

<?php
$math = new class
{
	function add($a, $b)
	{
		return $a + $b;
	}
	
	function sub($a, $b)
	{
		return $a - $b;
	}
	
	function mul($a, $b)
	{
		return $a * $b;
	}
	
	function div($a, $b)
	{
		return $a / $b;
	}
};

echo $math->add(3, 2);
echo "<br />";
echo $math->sub(3, 2);
echo "<br />";
echo $math->mul(3, 2);
echo "<br />";
echo $math->div(3, 2);
?>
Vorschau

Division von Ganzzahlen

Eine neue praktische Funktion in PHP 7 ist intdiv(). Die Funktion intdiv() führt die Division von zwei Ganzzahlen durch und gibt das Ergebnis als Ganzzahl zurück. Das folgende Beispiel zeigt den Unterschied, beim Teilen von zwei Ganzzahlen zwischen dem Divisionsoperator / und der Funktion intdiv():

<?php
echo 6 / 4;
echo "<br />";
echo intdiv(6, 4);
?>
Vorschau

Entfernte Funktionen

Mit PHP 7 wurden auch einige abwärtsinkompatible Änderungen durchgeführt. In diesem Abschnitt wollen wir Ihnen die wichtigsten Änderungen zeigen und was man dagegen tun kann.


Nummerische Zeichenkette in hexadezimaler Schreibweise

Bei Vorgängerversionen von PHP 7 wurden Zeichenketten die eine Zahl in hexadezimaler Schreibweise enthalten als nummerisch angesehen. Ein Aufruf wie is_numeric("0x01") hat also den Wert true zurückgegeben. Seit PHP 7 wird hier jedoch false zurückgegeben. Das folgende Beispiel zeigt unter anderem die Addition von zwei Hexadezimalzahlen. Bei PHP 5 wird hier der Wert 5 ausgegeben - bei PHP 7 hingegen 0.

<?php
echo ("2" + "3");
echo "<br />";
echo ("0x02" + "0x03");
?>
Vorschau

Funktionen für reguläre Ausdrücke

Seit PHP 5.3 sind die POSIX-Funktionen für reguläre Ausdrücke als veraltet gekennzeichnet. Mit PHP 7 wurden diese Funktionen aus dem Sprachumfang entfernt. Stattdessen sollten die PCRE-Funktionen verwendet werden. Diese sind ebenfalls bereits seit PHP 4 im Sprachumfang enthalten. Die folgende Tabelle zeigt, welche POSIX-Funktionen es gibt und durch welche PCRE-Funktionen diese unter PHP 7 zwingend ersetzt werden müssen:

POSIX-Funktion PCRE-Funktion Hinweis
ereg() preg_match() -
eregi() preg_match() mit dem Parameter i
ereg_replace() preg_replace() -
eregi_replace() preg_replace() mit dem Parameter i
split() preg_split() -
split() preg_split() mit dem Parameter i
sql_regcase() preg_match() oder preg_quote() -

Datenbank-APIs

Mit PHP 7 wurden die Datenbank-APIs mysql und mssql entfernt.

Die Extension mysql gibt es bereits seit der PHP-Version 2, wurde jedoch mit PHP 5.5 als veraltet gekennzeichnet. Schon damals empfahlen die Entwickler von PHP, auf die neue Extension mysqli oder die API PDO umzusteigen. Mit PHP 7 wurde nun die Extension mysql endgültig entfernt. Die Extension mysqli sowie die API PDO stehen weiterhin unter aktiver Weiterentwicklung und können auch in PHP 7 ohne Bedenken verwendet werden.

Für den Zugriff auf einen SQL-Server von Microsoft konnte mit PHP 5 noch die Extensions mssql und sqlsrv sowie die API PDO verwendet werden. Die Extension mssql ist eine Schnittstelle, die von freien Entwicklern bzw. der PHP-Community entwickelt wurde. sqlsrv hingegen ist die von Microsoft entwickelte Schnittstelle zur Kommunikation mit dem SQL-Server von Microsoft über PHP. Mit PHP 7 wurde nun die Extension mssql vollständig entfernt. Als Alternative kann entweder die Extension sqlsrv oder die API PDO verwendet werden.

» Hallo Gast • Anmelden
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK