PHP 8 : Alle Features im Überblick

Nicht deine Sprache?

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 Features

PHP 8.0 ist ein großes Update von PHP. Es gibt, neue Funktionen und Optimierungen, darunter

  • benannte Argumente, Union-Typen, Attribute
  • Hochstufung von Konstruktoreigenschaften, Übereinstimmungsausdruck, Nullsafe-Operator
  • JIT und Verbesserungen des Typsystems

1.Named arguments

Optionale Parameter kannst du jetzt überspringen. Praktisch

htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
htmlspecialchars($string, double_encode: false);

2.Attributes

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) { /* ... */ }
}

3.Constructor property promotion

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,
  ) {}
}

4. Union Types

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

5. Match Expression

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

5. Nulsafe Operator

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;

6. Saner string to number comparisons

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

6. Consistent type errors for internal functions

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

Was gibt es noch für neue Funktionen in PHP 8?

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.


Über Mich



    php        php 8   

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
smileys


HTML: Salbei Farbe HEX – Farbcode 🌈 – So gehts

Wenn du verschiedene Salbei Töne abbilden musst. Dann kannst du diesen ganz einfach selber erstellen...

Windows 11: Zeitzone ändern und einstellen

Hey du verrückter Zeitreisender! Wenn du dich in einem falschen Zeitalter oder unter der falschen...

Google Disavow Tool

Das Disavow Tool ermöglicht es dir, Google mitzuteilen, welche Backlinks du nicht in deinem Backlinks...

Raspberry Pi : Neustarten – So gehts

Wenn du deinen Raspberry Pi neu starten möchtest, kannst du dies auf einfache Weise tun...

Trust Wallet: Wiederherstellen – So gehts

Wenn du ein neues Handy hast oder dein Trust Wallet App gelöscht hast musst du...

Trust Wallet: Handy verloren?! – Kein Problem

Wenn man sein Handy verliert ist es ärgerlich. Wenn darauf noch das Trust Wallet war...

Website Link erstellen: So gehts! Generator 2024

So funktioniert der Link Generator 2024 Was sind Links? (Hyperlinks) Links ist der Verweis von...

Raspberry Pi: SSH aktivieren – So gehts

In diesem Hilfebeitrag werde ich dir erklären, wie du SSH auf deinem Raspberry Pi aktivieren...

Youtube Einnahmen Rechner

Youtube Einnahmen Rechner 2024 Wie hoch deine Youtube Einnamen sein werden, lässt sich oft so...

Raspberry Pi: Teamviewer installieren – So gehts

In diesem Beitrag werde ich dir zeigen, wie du TeamViewer auf deinem Raspberry Pi installieren...

Whatsapp: Status löschen – So gehts

In der heutigen Zeit ist WhatsApp nicht mehr aus unserem Alltag wegzudenken. Es ist eine...

100+ Chkdsk Befehle die ganze Liste

Chkdsk ist noch viel effektiver wenn du es mit den richtigen Befehlen bedienst. Damit lässt...

100+ ROS Terminal Befehle mit Erklärung

ROS (Robot Operating System) ist ein Framework, das es ermöglicht, Roboteranwendungen einfach zu entwickeln. In...

100+ Geogebra Befehle für schnelles arbeiten

Geogebra ist noch viel effektiver wenn du es mit Shortcuts bedienst. Damit lässt sich noch...

Ubuntu/Linux: Gnome im Terminal installieren

Du benutzt Linux bzw. Ubuntu und möchtest Dash to Dock über das Terminal installieren? Kein...