2024 年 11 月 21 日にリリース予定の PHP 8.4 には、いくつかのエキサイティングな新機能と改善点が詰め込まれています。このブログ投稿では、最も興味深い追加と変更のいくつかを検討します:
配列ヘルパー関数の次のバリアントが PHP 8.4 に追加されます:
これらの関数は配列とコールバック関数を受け取り、以下を返します:
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. |
Nota: array_find() hanya mendapatkan semula elemen padanan pertama. Untuk berbilang padanan, pertimbangkan untuk menggunakan array_filter().
Diberikan tatasusunan dengan pasangan nilai kunci dan fungsi panggil balik:
$array = ['1'=> 'red', '2'=> 'purple', '3' => 'green'] function hasLongName($value) { return strlen($value) > 4; }
Begini cara kita boleh menggunakan fungsi baharu:
array_find():
// Find the first color with a name length greater than 4 $result1 = array_find($array, 'hasLongName'); var_dump($result1); // string(5) "purple"
kunci_cari_tatasusunan():
// 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 memperkenalkan cangkuk hartanah, menawarkan cara yang lebih elegan untuk mengakses dan mengubah suai sifat peribadi atau dilindungi kelas. Sebelum ini, pembangun bergantung pada getter, setter dan kaedah ajaib (__get dan __set). Kini, anda boleh mentakrifkan dapatkan dan tetapkan cangkuk secara langsung pada harta benda, mengurangkan kod boilerplate.
Daripada menamatkan sifat dengan koma bernoktah, kita boleh menggunakan blok kod {} untuk memasukkan cangkuk sifat.
Cangkuk ini adalah pilihan dan boleh digunakan secara bebas. Dengan mengecualikan satu atau yang lain, kami boleh menjadikan harta itu baca sahaja atau tulis sahaja.
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"
Jika $value ialah integer, mesej ralat berikut dilemparkan:
PHP Fatal error: Uncaught InvalidArgumentException: Expected a string for full name, integer given.
Jika $value ialah rentetan kosong, mesej ralat berikut dilemparkan:
PHP Fatal error: Uncaught ValueError: Name must be non-empty
PHP 8.4 memperkenalkan sintaks yang lebih mudah, membolehkan anda merantai kaedah pada objek yang baru dibuat tanpa kurungan. Walaupun ini adalah pelarasan kecil, ia menghasilkan kod yang lebih bersih dan kurang bertele-tele.
(new MyClass())->getShortName(); // PHP 8.3 and older new MyClass()->getShortName(); // PHP 8.4
Selain kaedah merantai pada objek yang baru dibuat, anda juga boleh merantai sifat, kaedah dan sifat statik, akses tatasusunan, dan juga seruan langsung kelas. Contohnya:
new MyClass()::CONSTANT, new MyClass()::$staticProperty, new MyClass()::staticMethod(), new MyClass()->property, new MyClass()->method(), new MyClass()(), new MyClass(['value'])[0],
Sebelum PHP 8.4, jika parameter adalah jenis X, ia boleh menerima nilai nol tanpa mengisytiharkan X sebagai boleh batal secara eksplisit. Bermula dengan PHP 8.4, anda tidak lagi boleh mengisytiharkan nilai parameter nol tanpa menyatakannya dengan jelas sebagai boleh batal dalam pembayang jenis; jika tidak, amaran penamatan akan dicetuskan.
function greetings(string $name = null) // fires a deprecation warning
Untuk mengelakkan amaran, anda mesti menyatakan secara jelas bahawa parameter boleh menjadi batal dengan menggunakan tanda soal (?) dalam pengisytiharan jenis.
function greetings(?string $name)
atau,
function greetings(?string $name = null)
Rentetan berbilangbait ialah jujukan aksara yang setiap aksara boleh menggunakan lebih daripada satu bait storan. Ini adalah perkara biasa dalam bahasa dengan skrip kompleks atau bukan Latin, seperti Jepun atau Cina. Terdapat beberapa fungsi multibait dalam PHP seperti mb_strlen(), mb_substr(), mb_strtolower(), mb_strpos(), dll. Tetapi beberapa fungsi seperti trim(), ltrim(), rtrim(), ucfirst(), lcfirst () dsb. kekurangan setara multibait langsung.
Terima kasih kepada PHP 8.4, di mana fungsi multibait baharu akan ditambah. Ia termasuk: mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst()dan mb_lcfirst(). Fungsi ini mengikut tandatangan fungsi asal, dengan parameter $encoding tambahan.
Mari kita bincangkan mb_functions baharu:
mb_trim():
Mengalih keluar semua aksara ruang putih dari permulaan dan penghujung rentetan berbilangbait.
Tandatangan fungsi:
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():
Mengalih keluar semua aksara ruang putih dari permulaan rentetan berbilangbait.
Tandatangan fungsi:
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():
Mengalih keluar semua aksara ruang putih dari hujung rentetan berbilangbait.
Tandatangan fungsi:
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():
Menukar aksara pertama rentetan berbilangbait yang diberikan kepada huruf besar, meninggalkan aksara yang lain tidak berubah.
Tandatangan fungsi:
function mb_ucfirst(string $string, ?string $encoding = null): string {}
mb_lcfirst():
Serupa dengan mb_ucfirst(), tetapi ia menukar aksara pertama rentetan berbilangbait yang diberikan kepada huruf kecil.
Tandatangan fungsi:
function mb_lcfirst(string $string, ?string $encoding = null): string {}
Saya harap blog ini telah memberi anda gambaran yang baik tentang beberapa perubahan yang akan datang dalam PHP 8.4. Versi baharu nampaknya memperkenalkan kemas kini menarik yang akan meningkatkan pengalaman pembangun. Saya tidak sabar-sabar untuk mula menggunakannya sebaik sahaja ia dikeluarkan secara rasmi.
Untuk maklumat lanjut dan kemas kini, sila lawati halaman RFC rasmi.
以上がPHP - 最新かつ最高のものを発見するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。