PHP - 最新かつ最高のものを発見する

WBOY
リリース: 2024-09-10 20:32:40
オリジナル
1129 人が閲覧しました

PHP  - Discover the Latest and Greatest

2024 年 11 月 21 日にリリース予定の PHP 8.4 には、いくつかのエキサイティングな新機能と改善点が詰め込まれています。このブログ投稿では、最も興味深い追加と変更のいくつかを検討します:

  1. 新しい配列ヘルパー関数
  2. プロパティフック
  3. 括弧なしの「new」
  4. 暗黙的に null 許容パラメータ宣言は非推奨になりました
  5. 新しいマルチバイト関数

1. 新しい配列ヘルパー関数

配列ヘルパー関数の次のバリアントが PHP 8.4 に追加されます:

  • array_find()
  • array_find_key()
  • array_any()
  • array_all()

これらの関数は配列とコールバック関数を受け取り、以下を返します:

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().

Contoh

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:

  1. array_find():

      // Find the first color with a name length greater than 4
    
      $result1 = array_find($array, 'hasLongName');
    
      var_dump($result1);  // string(5) "purple"
    
    ログイン後にコピー
  2. 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"
    
    ログイン後にコピー
  3. array_any():

      // Check if any color name has a length greater than 4
    
      $result3 = array_any($array, 'hasLongName');
    
      var_dump($result3);  // bool(true)
    
    ログイン後にコピー
  4. array_all():

      // Check if all color names have a length greater than 4
    
      $result4 = array_all($array, 'hasLongName');
    
      var_dump($result4);  // bool(false)
    
    ログイン後にコピー

2. Mata kail harta

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.

Contoh

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
ログイン後にコピー

3. 'baru' tanpa kurungan

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],
ログイン後にコピー

4. Pengisytiharan parameter boleh batal secara tersirat ditamatkan

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)
ログイン後にコピー

5. Fungsi multibait baharu

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:

  1. 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:

    • $string: Rentetan untuk dipangkas.
    • $characters: Parameter pilihan yang termasuk senarai aksara untuk dipangkas.
    • $encoding: Parameter pengekodan menentukan pengekodan aksara yang digunakan untuk mentafsir rentetan, memastikan aksara multibait diproses dengan betul. Pengekodan biasa termasuk UTF-8.
  2. 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 {}
    
    ログイン後にコピー
  3. 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 {}
    
    ログイン後にコピー
  4. 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 {}
    
    ログイン後にコピー
  5. 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 {}
    
    ログイン後にコピー

Kesimpulan

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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート