> PHP 8 : Alle Features im Überblick - Blogseite.com



PHP 8 : Alle Features im Überblick

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