Tools-Tags
Tools-Tags
Intelligenter, schneller, für die Zukunft gebaut.
PHP 8.5 ist ein großes Update der PHP-Sprache, Mit neuen Funktionen einschließlich der URI-Erweiterung, Pipe-Operator und Unterstützung zum Ändern von Eigenschaften beim Klonen.
Jetzt auf PHP 8.5 upgraden!URI-Erweiterung
Die neue immer verfügbare URI-Erweiterung bietet APIs zum sicheren Analysieren und Ändern von URIs und URLs gemäß RFC 3986 und den WHATWG URL-Standards.
Unterstützt durch die uriparser- (RFC 3986) und Lexbor- (WHATWG URL) Bibliotheken.
Erfahren Sie mehr über die Hintergründe dieser Funktion im Blog der PHP Foundation.
var_dump ( $components [ 'host' ]);
// string(7) "php.net"
$uri = new Uri ( 'https://php.net/releases/8.5/en.php' );
var_dump ( $uri -> getHost ());
// string(7) "php.net"
Pipe-Operator
Der Pipe-Operator ermöglicht das Verkettung von Funktionsaufrufen, ohne sich mit Zwischenvariablen zu beschäftigen. Dies erlaubt, viele "verschachtelte Aufrufe" durch eine vorwärts lesbare Kette zu ersetzen, anstatt von innen nach außen.
Erfahren Sie mehr über die Hintergründe dieser Funktion im Blog der PHP Foundation.
$slug = strtolower (
str_replace ( '.' , '' ,
str_replace ( ' ' , '-' ,
trim ( $title )
)
)
);
var_dump ( $slug );
// string(15) "php-85-released"
$slug = $title
|> trim (...)
|> (fn( $str ) => str_replace ( ' ' , '-' , $str ))
|> (fn( $str ) => str_replace ( '.' , '' , $str ))
|> strtolower (...);
var_dump ( $slug );
// string(15) "php-85-released"
Klonen mit Eigenschaften
Es ist nun möglich, Eigenschaften beim Klonen eines Objekts zu aktualisieren, indem ein assoziatives Array an die clone()-Funktion übergeben wird. Dies ermöglicht eine einfache Unterstützung des "with-er"-Musters für readonly-Klassen.
{
public function __construct (
public int $red ,
public int $green ,
public int $blue ,
public int $alpha = 255 ,
) {}
public function withAlpha ( int $alpha ): self
{
$values = get_object_vars ( $this );
$values [ 'alpha' ] = $alpha
; return new self (... $values );
}
}
$blue = new Color ( 79 , 91 , 147 );
$transparentBlue = $blue -> withAlpha ( 128 );
{
public function __construct (
public int $red ,
public int $green ,
public int $blue ,
public int $alpha = 255 ,
) {}
public function withAlpha ( int $alpha ): self
{
return clone( $this , [
'alpha' => $alpha ,
]);
}
}
$blue = new Color ( 79 , 91 , 147 );
$transparentBlue = $blue -> withAlpha ( 128 );
#[\NoDiscard] Attribut
Durch Hinzufügen des #[\NoDiscard]-Attributs zu einer Funktion prüft PHP, ob der zurückgegebene Wert verwendet wird, und gibt eine Warnung aus, wenn dies nicht der Fall ist. Dies erhöht die Sicherheit von APIs, bei denen der Rückgabewert wichtig ist, der Wert jedoch leicht versehentlich ignoriert werden kann.
Das zugehörige (void)-Casting kann verwendet werden, um anzuzeigen, dass ein Wert absichtlich nicht verwendet wird.
{
return 'PHP 8.4' ;
}
getPhpVersion (); // No warning
function getPhpVersion (): string
{
return 'PHP 8.5' ;
}
getPhpVersion ();
// Warning: The return value of function getPhpVersion() should
// either be used or intentionally ignored by casting it as (void)
Closures und First-Class Callables in Konstantenausdrücken
Statische Closures und First-Class Callables können jetzt in Konstantenausdrücken verwendet werden. Dazu gehören Attributparameter, Standardwerte von Eigenschaften und Parametern sowie Konstanten.
{
#[ AccessControl (
new Expression ( 'request.user === post.getAuthor()' ),
)]
public function update (
Request $request ,
Post $post ,
): Response {
// ...
}
}
{
#[ AccessControl (static function (
Request $request ,
Post $post ,
): bool {
return $request -> user === $post -> getAuthor ();
})]
public function update (
Request $request ,
Post $post ,
): Response {
// ...
}
}
Persistente cURL-Share-Handles
Im Gegensatz zu curl_share_init() werden von curl_share_init_persistent() erstellte Handles am Ende der PHP-Anfrage nicht zerstört. Wenn ein persistentes Share-Handle mit denselben Share-Optionen gefunden wird, wird es wiederverwendet, wodurch die Kosten für die Initialisierung von cURL-Handles jedes Mal vermieden werden.
curl_share_setopt ( $sh , CURLSHOPT_SHARE , CURL_LOCK_DATA_DNS );
curl_share_setopt ( $sh , CURLSHOPT_SHARE , CURL_LOCK_DATA_CONNECT );
$ch = curl_init ( 'https://php.net/' );
curl_setopt ( $ch , CURLOPT_SHARE , $sh );
curl_exec ( $ch );
CURL_LOCK_DATA_DNS ,
CURL_LOCK_DATA_CONNECT ,
]);
$ch = curl_init ( 'https://php.net/' );
curl_setopt ( $ch , CURLOPT_SHARE , $sh );
// This may now reuse the connection from an earlier SAPI request
curl_exec ( $ch );
array_first()- und array_last()-Funktionen
Die Funktionen array_first() und array_last() geben jeweils den ersten bzw. letzten Wert eines Arrays zurück. Ist das Array leer, wird null zurückgegeben (was die Verwendung mit dem ??-Operator erleichtert).
? null
: $events [ array_key_last ( $events )];
Zusätzliche Funktionen und Verbesserungen
- Schwere Fehler (z. B. überschrittene maximale Ausführungszeit) enthalten jetzt einen Backtrace.
- Attribute können jetzt auf Konstanten angewendet werden.
- #[\Override]-Attribut kann jetzt auf Eigenschaften angewendet werden.
- #[\Deprecated]-Attribut kann auf Traits und Konstanten verwendet werden.
- Statische Eigenschaften unterstützen jetzt asymmetrische Sichtbarkeit.
- Eigenschaften können durch Constructor Property Promotion als final markiert werden.
- Closure::getCurrent()-Methode hinzugefügt, um die Rekursion in anonymen Funktionen zu vereinfachen.
- Die Funktionen setcookie() und setrawcookie() unterstützen jetzt den "partitioned"-Schlüssel.
- Neue Funktionen get_error_handler() und get_exception_handler() sind verfügbar.
- Neue Methoden Dom\Element::getElementsByClassName() und Dom\Element::insertAdjacentHTML() sind verfügbar.
- Funktion grapheme_levenshtein() hinzugefügt.
- Neues #[\DelayedTargetValidation]-Attribut kann verwendet werden, um Compiler-Fehler von Kern- und Erweiterungsattributen auf ungültigen Zielen zu unterdrücken.
Abwertungen und Abwärtskompatibilitätsunterbrechungen
- Der Backtick-Operator als Alias für shell_exec() ist veraltet.
- Nicht-kanonische Cast-Namen (boolean), (integer), (double) und (binary) sind veraltet. Verwenden Sie stattdessen (bool), (int), (float) und (string).
- Die INI-Einstellung disable_classes wurde entfernt, da sie verschiedene Engine-Annahmen bricht.
- Das Beenden von case-Anweisungen mit einem Semikolon statt eines Doppelpunkts ist veraltet.
- Die Verwendung von null als Array-Offset oder bei array_key_exists() ist veraltet. Verwenden Sie stattdessen einen leeren String.
- Es ist nicht mehr möglich, "array" und "callable" als Klassennamen-Aliase in class_alias() zu verwenden.
- Die Magischen Methoden __sleep() und __wakeup() sind soft-veraltet. Verwenden Sie stattdessen __serialize() und __unserialize().
- Eine Warnung wird nun ausgegeben, wenn NAN in andere Typen umgewandelt wird.
- Das Destrukturieren von Nicht-Array-Werten (außer null) mit [] oder list() erzeugt nun eine Warnung.
- Eine Warnung wird nun ausgegeben, wenn Floats (oder Strings, die wie Floats aussehen) in int umgewandelt werden, wenn dies nicht möglich ist.
Für Quellen -Downloads von PHP 8.5 besuchen Sie bitte die Downloads Seite. Windows -Binärdateien finden Sie auf der PHP für Windows Website. Die Liste der Änderungen wird in der aufgezeichnet ChangeLog.
Der Migrationsleitfaden ist im PHP -Handbuch erhältlich. Bitte wenden Sie sich an eine detaillierte Liste neuer Funktionen und rückwärtskompatible Änderungen.



