Prévu pour une sortie le 21 novembre 2024, PHP 8.4 contient de nouvelles fonctionnalités et améliorations intéressantes. Dans cet article de blog, nous explorerons certains des ajouts et modifications les plus intéressants :
Les variantes suivantes des fonctions d'assistance de tableau seront ajoutées dans PHP 8.4 :
Ces fonctions prendront un tableau et une fonction de rappel et renverront ce qui suit :
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. |
Remarque : array_find() récupère uniquement le premier élément correspondant. Pour plusieurs correspondances, pensez à utiliser array_filter().
Étant donné un tableau avec des paires clé-valeur et une fonction de rappel :
$array = ['1'=> 'red', '2'=> 'purple', '3' => 'green'] function hasLongName($value) { return strlen($value) > 4; }
Voici comment utiliser les nouvelles fonctions :
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 introduit les hooks de propriété, offrant un moyen plus élégant d'accéder et de modifier les propriétés privées ou protégées d'une classe. Auparavant, les développeurs s'appuyaient sur des getters, des setters et des méthodes magiques (__get et __set). Désormais, vous pouvez définir des hooks get et set directement sur une propriété, réduisant ainsi le code passe-partout.
Au lieu de terminer la propriété par un point-virgule, nous pouvons utiliser un bloc de code {} pour inclure le hook de propriété.
Ces crochets sont facultatifs et peuvent être utilisés indépendamment. En excluant l'un ou l'autre, nous pouvons rendre la propriété en lecture seule ou en écriture seule.
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"
Si $value est un entier, le message d'erreur suivant est généré :
PHP Fatal error: Uncaught InvalidArgumentException: Expected a string for full name, integer given.
Si $value est une chaîne vide, le message d'erreur suivant est généré :
PHP Fatal error: Uncaught ValueError: Name must be non-empty
PHP 8.4 introduit une syntaxe plus simple, vous permettant d'enchaîner des méthodes sur des objets nouvellement créés sans parenthèses. Bien qu'il s'agisse d'un ajustement mineur, il en résulte un code plus propre et moins verbeux.
(new MyClass())->getShortName(); // PHP 8.3 and older new MyClass()->getShortName(); // PHP 8.4
En plus de chaîner des méthodes sur des objets nouvellement créés, vous pouvez également chaîner des propriétés, des méthodes et propriétés statiques, un accès au tableau et même un appel direct de la classe. Par exemple :
new MyClass()::CONSTANT, new MyClass()::$staticProperty, new MyClass()::staticMethod(), new MyClass()->property, new MyClass()->method(), new MyClass()(), new MyClass(['value'])[0],
Avant PHP 8.4, si un paramètre était de type X, il pouvait accepter une valeur nulle sans déclarer explicitement X comme nullable. À partir de PHP 8.4, vous ne pouvez plus déclarer une valeur de paramètre nulle sans l'indiquer clairement comme nullable dans l'indication de type ; sinon, un avertissement de dépréciation sera déclenché.
function greetings(string $name = null) // fires a deprecation warning
Pour éviter les avertissements, vous devez indiquer explicitement qu'un paramètre peut être nul en utilisant un point d'interrogation (?) dans la déclaration de type.
function greetings(?string $name)
ou,
function greetings(?string $name = null)
Une chaîne multi-octets est une séquence de caractères où chaque caractère peut utiliser plus d'un octet de stockage. Ceci est courant dans les langues avec des écritures complexes ou non latines, comme le japonais ou le chinois. Il existe plusieurs fonctions multi-octets en PHP telles que mb_strlen(), mb_substr(), mb_strtolower(), mb_strpos(), etc. Mais certaines fonctions comme trim(), ltrim(), rtrim(), ucfirst(), lcfirst () etc. manquent d'équivalents multi-octets directs.
Grâce à PHP 8.4, où de nouvelles fonctions multioctets seront ajoutées. Ils incluent : mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst() et mb_lcfirst(). Ces fonctions suivent les signatures de fonctions d'origine, avec un paramètre $encoding supplémentaire.
Discutons des nouvelles mb_functions :
mb_trim() :
Supprime tous les caractères d'espacement du début et de la fin d'une chaîne multi-octets.
Signature de fonction :
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 {}
Paramètres :
mb_ltrim() :
Supprime tous les caractères d'espacement du début d'une chaîne multi-octets.
Signature de fonction :
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() :
Supprime tous les caractères d'espacement à la fin d'une chaîne multi-octets.
Signature de fonction :
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() :
Convertit le premier caractère d'une chaîne multi-octets donnée en casse du titre, laissant le reste des caractères inchangé.
Signature de fonction :
function mb_ucfirst(string $string, ?string $encoding = null): string {}
mb_lcfirst() :
Similaire à mb_ucfirst(), mais il convertit le premier caractère d'une chaîne multi-octets donnée en minuscules.
Signature de fonction :
function mb_lcfirst(string $string, ?string $encoding = null): string {}
J'espère que ce blog vous a donné un bon aperçu de certains des changements à venir dans PHP 8.4. La nouvelle version semble introduire des mises à jour intéressantes qui amélioreront l'expérience des développeurs. J’ai hâte de commencer à l’utiliser une fois qu’il sera officiellement publié.
Pour plus d'informations et de mises à jour, veuillez visiter la page officielle RFC.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!