PHP 8 : Alle Features im Überblick

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

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.

Hat dir der Beitrag gefallen?

Du hast bereits abgestimmt!

    php        php 8   

Das könnte dich interessieren!


Weitere Kategorien






Schreibe einen Kommentar



34308