Mit PHP kommen auch ein paar neue Features die für Entwickler durchaus wichtig sind. In diesem Beitrag habe ich alle neuen Features auf Deutsch zusammengefasst.
PHP 8.0 ist ein großes Update von PHP. Es gibt, neue Funktionen und Optimierungen, darunter
Inhaltsverzeichnis
Optionale Parameter kannst du jetzt überspringen. Praktisch
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
htmlspecialchars($string, double_encode: false);
Anstelle von PHPDoc-Anmerkungen kannst du jetzt strukturierte Metadaten mit der nativen PHP-Syntax verwenden.
class PostsController
{
/**
* @Route("/api/posts/{id}", methods={"GET"})
*/
public function get($id) { /* ... */ }
}
class PostsController
{
#[Route("/api/posts/{id}", methods: ["GET"])]
public function get($id) { /* ... */ }
}
Weniger Boilerplate-Code zum Definieren und Initialisieren von Eigenschaften.
class Point {
public float $x;
public float $y;
public float $z;
public function __construct(
float $x = 0.0,
float $y = 0.0,
float $z = 0.0
) {
$this->x = $x;
$this->y = $y;
$this->z = $z;
}
}
class Point {
public function __construct(
public float $x = 0.0,
public float $y = 0.0,
public float $z = 0.0,
) {}
}
Anstelle von PHPDoc-Annotationen für eine Kombination von Typen kannst du jetzt native Union-Typdeklarationen verwenden, die zur Laufzeit validiert werden.
class Number {
/** @var int|float */
private $number;
/**
* @param float|int $number
*/
public function __construct($number) {
$this->number = $number;
}
}
new Number('NaN'); // Ok
class Number {
public function __construct(
private int|float $number
) {}
}
new Number('NaN'); // TypeError
Match ist ein Ausdruck, d. h. sein Ergebnis kann in einer Variablen gespeichert oder zurückgegeben werden.
switch (8.0) {
case '8.0':
$result = "Oh no!";
break;
case 8.0:
$result = "This is what I expected";
break;
}
echo $result;
//> Oh no!
echo match (8.0) {
'8.0' => "Oh no!",
8.0 => "This is what I expected",
};
//> This is what I expected
Anstelle von Null-Prüfbedingungen kann man jetzt eine Aufrufkette mit dem neuen nullsafe-Operator verwenden.
$country = null;
if ($session !== null) {
$user = $session->user;
if ($user !== null) {
$address = $user->getAddress();
if ($address !== null) {
$country = $address->country;
}
}
}
$country = $session?->user?->getAddress()?->country;
Beim Vergleich mit einer numerischen Zeichenfolge verwendet PHP 8 einen Zahlenvergleich. Andernfalls konvertiert es die Zahl in eine Zeichenfolge und verwendet einen Zeichenfolgenvergleich.
0 == 'foobar' // true
0 == 'foobar' // false
Die meisten internen Funktionen lösen jetzt eine Fehlerausnahme aus, wenn die Validierung der Parameter fehlschlägt.
strlen([]); // Warning: strlen() expects parameter 1 to be string, array given
array_chunk([], -1); // Warning: array_chunk(): Size parameter expected to be greater than 0
strlen([]); // TypeError: strlen(): Argument #1 ($str) must be of type string, array given
array_chunk([], -1); // ValueError: array_chunk(): Argument #2 ($length) must be greater than 0
PHP 8 führt ebenfalls zwei neue JIT-Kompilierungs-Engines ein.
Von beiden Engines ist Tracing JIT die besssere, die Engine zeigt dreimal bessere Leistungen bei synthetischen Benchmarks und auch eine 1,5 bis 2 mal bessere Leistung bei einer lang laufenden Anwendung.
Hi ich bin’s Dominik. Auf Blogseite.com findest du alles was mich interessiert. Mag Games, liebe SEO, programmiere gerne und möchte dir mit verschiedenen Themen die mich begeistern einen Mehrwert liefern. Viel Spaß auf meiner Seite
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.