Veröffentlichung der Programmiersprache PHP 8.5

Nach einem Jahr der Entwicklung wurde die Version der Programmiersprache PHP 8.5 veröffentlicht. Der neue Release enthält eine Reihe neuer Funktionen sowie einige Änderungen, die die Kompatibilität beeinträchtigen.

Wesentliche Änderungen in PHP 8.5 (1, 2, 3):

  • Der Operator „|>“ (Pipe) wurde hinzugefügt, der es ermöglicht, Werte von einer Funktion zur anderen zu übergeben, ohne zwischenzeitliche Zuweisungen und Variablen zu verwenden. Das Ergebnis der Ausführung einer Funktion wird als Parameter in einer anderen Funktion genutzt. Wenn eine Funktion nur ein Argument hat, wird der Parameter zur Übertragung des Wertes durch „…“ angegeben, und wenn die Funktion mehrere Argumente hat, erfolgt die Übergabe über Closures. Zum Beispiel ist der folgende Code $output = $input |> trim(…) |> fn (string $string) => str_replace(‘ ‘, ‘-’, $string) |> fn (string $string) => str_replace([‘.’, ‘/’, ‘…’], ‘’, $string) |> strtolower(…); äquivalent zu $temp = trim($input); $temp = str_replace(‘ ‘, ‘-’, $temp); $temp = str_replace([‘.’, ‘/’, ‘…’], ‘’, $temp); $output = strtolower($temp); oder $output = strtolower( str_replace([‘.’, ‘/’, ‘…’], ‘’, str_replace(‘ ‘, ‘-’, trim($input) ) ) );
  • Unterstützung für die Zuweisung neuer Werte an geklonte Objekte während des Klonvorgangs wurde hinzugefügt, indem ein assoziatives Array an die Funktion clone() übergeben wird. public function withTitle(string $title): self { return clone($this, [ 'title' => $title, ]); }
  • Das Attribut «#[NoDiscard]» wurde hinzugefügt, das verwendet werden kann, um Funktionen zu kennzeichnen, deren Rückgabewerte immer genutzt werden müssen. Wenn der Rückgabewert einer solchen Funktion ignoriert wird, gibt der Interpreter eine Warnung aus. Um die Überprüfung zu umgehen, kann ein Aufruf mit Typumwandlung zu void verwendet werden. #[NoDiscard('Dieser Rückgabewert muss verwendet werden.')] function foo(): string { return 'hi'; } foo(); // gibt eine Warnung aus (void) foo(); // Ok $string = foo(); // Ok
  • Die Verwendung von Closures und First-Class-Callables in konstanten Ausdrücken ist jetzt erlaubt, in denen zuvor nur unveränderliche Werte, die zur Kompilierungszeit berechnet wurden, angegeben werden konnten. Zum Beispiel können nun Closures in Attributen, Standardwerten und Konstanten angegeben werden. Solche Closures müssen immer mit dem Schlüsselwort „static“ gekennzeichnet werden und dürfen nicht auf äußere Variablen mit dem Ausdruck „use“ zugreifen. #[SkipDiscovery(static function (Container $container): bool { return ! $container->get(Application::class) instanceof ConsoleApplication; })]
  • Bei der Ausgabe von schwerwiegenden Fehlern wird nun ein Backtrace der Aufrufe an die Fehlermeldung angehängt.
  • Die Funktionen array_first() und array_last() wurden hinzugefügt, um das erste und letzte Element eines Arrays auszugeben. Anstelle von $first = $array[array_key_first($array)] ?? null; kann man jetzt $first = array_first($array); schreiben.
  • Ein URI-Modul wurde hinzugefügt, das eine vereinfachte API für die Analyse von Links bereitstellt. Die Analyse erfolgt mit den Bibliotheken uriparser und lexbor. use Uri\Rfc3986\Uri; $uri = new Uri('https://opennet.me/64290'); $uri->getHost(); // opennet.me $uri->getScheme(); // https://
  • Das Attribut "#[DelayedTargetValidation]" wurde implementiert, welches es ermöglicht, die Überprüfung von Attributen wie "#[Override]" von der Kompilierungszeit auf die Ausführungszeit zu verlagern. #[DelayedTargetValidation] #[Override] public const NAME = 'Child';
  • Die Funktionen get_error_handler() und get_exception_handler() wurden hinzugefügt, um Funktionen für Fehler- und Ausnahmebehandler zu definieren.
  • Im Curl-Modul wurde die Funktion curl_share_init_persistent() implementiert, die es ermöglicht, Deskriptoren für die Verarbeitung verschiedener Anfragen gemeinsam zu nutzen.
  • Im Exif-Modul wurde die Unterstützung für Bilder im HEIF- und HEIC-Format hinzugefügt.
  • Folgende Elemente wurden als veraltet erklärt: nicht standardmäßige Syntax zur Typanpassung (z. B. '(integer)' anstelle von '(int)'), die Verwendung von Backticks (`) zum Aufrufen von Befehlen anstelle von shell_exec(), wiederholte Deklarationen von Konstanten, die Verwendung eines Semikolons anstelle eines Doppelpunkts zum Beenden von case-Anweisungen sowie die Angabe von null anstelle eines leeren Strings in Arrays oder in der Funktion array_key_exists(). Die Unterstützung für die Einstellung „disabled_classes“ wurde aus der ini-Datei entfernt.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster