Scheduled for release on November 21, 2024, PHP 8.4 packs some exciting new features and improvements. In this blog post, we'll explore some of the most interesting additions and changes:
The following variants of array helper functions will be added in PHP 8.4:
These functions will take an array and a callback function and return the following:
functions | Return value |
---|---|
array_find() | Returns the first element that meets the callback condition; NULL otherwise. |
array_find_key() | Returns the key of the first element that meets the callback condition; NULL otherwise. |
array_any() | Returns true if at least one element matches the callback condition; false otherwise. |
array_all() | Returns true if all elements match the callback condition; false otherwise. |
Hinweis: array_find() ruft nur das erste passende Element ab. Erwägen Sie für mehrere Übereinstimmungen die Verwendung von array_filter().
Gegeben sei ein Array mit Schlüssel-Wert-Paaren und einer Callback-Funktion:
$array = ['1'=> 'red', '2'=> 'purple', '3' => 'green'] function hasLongName($value) { return strlen($value) > 4; }
So können wir die neuen Funktionen nutzen:
array_find():
// Find the first color with a name length greater than 4 $result1 = array_find($array, 'hasLongName'); var_dump($result1); // string(5) "purple"
array_find_key():
// Find the key of the first color with a name length greater than 4 $result2 = array_find_key($array, 'hasLongName'); var_dump($result2); // string(1) "2"
array_any():
// Check if any color name has a length greater than 4 $result3 = array_any($array, 'hasLongName'); var_dump($result3); // bool(true)
array_all():
// Check if all color names have a length greater than 4 $result4 = array_all($array, 'hasLongName'); var_dump($result4); // bool(false)
PHP 8.4 führt Eigenschafts-Hooks ein und bietet eine elegantere Möglichkeit, auf private oder geschützte Eigenschaften einer Klasse zuzugreifen und diese zu ändern. Bisher verließen sich Entwickler auf Getter, Setter und magische Methoden (__get und __set). Jetzt können Sie Get- und Set-Hooks direkt für eine Eigenschaft definieren und so den Boilerplate-Code reduzieren.
Anstatt die Eigenschaft mit einem Semikolon zu beenden, können wir einen Codeblock {} verwenden, um den Eigenschaften-Hook einzuschließen.
Diese Haken sind optional und können unabhängig voneinander verwendet werden. Indem wir das eine oder andere ausschließen, können wir die Eigenschaft schreibgeschützt oder schreibgeschützt machen.
class User { public function __construct(private string $first, private string $last) {} public string $fullName { get => $this->first . " " . $this->last; set ($value) { if (!is_string($value)) { throw new InvalidArgumentException("Expected a string for full name," . gettype($value) . " given."); } if (strlen($value) === 0) { throw new ValueError("Name must be non-empty"); } $name = explode(' ', $value, 2); $this->first = $name[0]; $this->last = $name[1] ?? ''; } } } $user = new User('Alice', 'Hansen') $user->fullName = 'Brian Murphy'; // the set hook is called echo $user->fullName; // "Brian Murphy"
Wenn $value eine Ganzzahl ist, wird die folgende Fehlermeldung ausgegeben:
PHP Fatal error: Uncaught InvalidArgumentException: Expected a string for full name, integer given.
Wenn $value eine leere Zeichenfolge ist, wird die folgende Fehlermeldung ausgegeben:
PHP Fatal error: Uncaught ValueError: Name must be non-empty
PHP 8.4 führt eine einfachere Syntax ein, die es Ihnen ermöglicht, Methoden für neu erstellte Objekte ohne Klammern zu verketten. Obwohl es sich hierbei um eine geringfügige Anpassung handelt, führt sie zu einem saubereren und weniger ausführlichen Code.
(new MyClass())->getShortName(); // PHP 8.3 and older new MyClass()->getShortName(); // PHP 8.4
Neben der Verkettung von Methoden für neu erstellte Objekte können Sie auch Eigenschaften, statische Methoden und Eigenschaften, Array-Zugriff und sogar den direkten Aufruf der Klasse verketten. Zum Beispiel:
new MyClass()::CONSTANT, new MyClass()::$staticProperty, new MyClass()::staticMethod(), new MyClass()->property, new MyClass()->method(), new MyClass()(), new MyClass(['value'])[0],
Vor PHP 8.4 konnte ein Parameter, wenn er vom Typ X war, einen Nullwert akzeptieren, ohne X explizit als nullbar zu deklarieren. Ab PHP 8.4 können Sie keinen Null-Parameterwert mehr deklarieren, ohne ihn im Typhinweis eindeutig als nullable anzugeben; andernfalls wird eine Verfallswarnung ausgelöst.
function greetings(string $name = null) // fires a deprecation warning
Um Warnungen zu vermeiden, müssen Sie explizit angeben, dass ein Parameter null sein kann, indem Sie in der Typdeklaration ein Fragezeichen (?) verwenden.
function greetings(?string $name)
oder,
function greetings(?string $name = null)
Eine Multibyte-Zeichenfolge ist eine Zeichenfolge, bei der jedes Zeichen mehr als ein Byte Speicherplatz beanspruchen kann. Dies ist häufig bei Sprachen mit komplexen oder nicht-lateinischen Schriften wie Japanisch oder Chinesisch der Fall. Es gibt mehrere Multibyte-Funktionen in PHP wie mb_strlen(), mb_substr(), mb_strtolower(), mb_strpos() usw. Aber einige der Funktionen wie trim(), ltrim(), rtrim(), ucfirst(), lcfirst () usw. fehlen direkte Multibyte-Äquivalente.
Dank PHP 8.4, wo neue Multibyte-Funktionen hinzugefügt werden. Dazu gehören: mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst() und mb_lcfirst(). Diese Funktionen folgen den ursprünglichen Funktionssignaturen mit einem zusätzlichen $encoding-Parameter.
Lassen Sie uns die neuen mb_functions besprechen:
mb_trim():
Entfernt alle Leerzeichen vom Anfang und Ende einer Multibyte-Zeichenfolge.
Funktionssignatur:
function mb_trim(string $string, string $characters = " \f\n\r\t\v\x00\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}", ?string $encoding = null): string {}
Parameter:
mb_ltrim():
Entfernt alle Leerzeichen vom Anfang einer Multibyte-Zeichenfolge.
Funktionssignatur:
function mb_ltrim(string $string, string $characters = " \f\n\r\t\v\x00\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}", ?string $encoding = null): string {}
mb_rtrim():
Entfernt alle Leerzeichen vom Ende einer Multibyte-Zeichenfolge.
Funktionssignatur:
function mb_rtrim(string $string, string $characters = " \f\n\r\t\v\x00\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}", ?string $encoding = null): string {}
mb_ucfirst():
Konvertiert das erste Zeichen einer bestimmten Multibyte-Zeichenfolge in die Groß-/Kleinschreibung des Titels, wobei die restlichen Zeichen unverändert bleiben.
Funktionssignatur:
function mb_ucfirst(string $string, ?string $encoding = null): string {}
mb_lcfirst():
Ähnlich wie mb_ucfirst(), aber es wandelt das erste Zeichen einer bestimmten Multibyte-Zeichenfolge in Kleinbuchstaben um.
Funktionssignatur:
function mb_lcfirst(string $string, ?string $encoding = null): string {}
Ich hoffe, dieser Blog hat Ihnen einen guten Überblick über einige der bevorstehenden Änderungen in PHP 8.4 gegeben. Die neue Version scheint spannende Updates einzuführen, die das Entwicklererlebnis verbessern werden. Ich kann es kaum erwarten, es zu verwenden, sobald es offiziell veröffentlicht ist.
Weitere Informationen und Updates finden Sie auf der offiziellen RFC-Seite.
The above is the detailed content of PHP - Discover the Latest and Greatest. For more information, please follow other related articles on the PHP Chinese website!