Heim >Backend-Entwicklung >PHP-Tutorial >PHP – Entdecken Sie das Neueste und Beste

PHP – Entdecken Sie das Neueste und Beste

WBOY
WBOYOriginal
2024-09-10 20:32:401147Durchsuche

PHP  - Discover the Latest and Greatest

Die Veröffentlichung von PHP 8.4 ist für den 21. November 2024 geplant und bietet einige aufregende neue Funktionen und Verbesserungen. In diesem Blogbeitrag werden wir einige der interessantesten Ergänzungen und Änderungen untersuchen:

  1. Neue Array-Hilfsfunktionen
  2. Eigenschaftshaken
  3. 'neu' ohne Klammern
  4. Implizit nullfähige Parameterdeklarationen veraltet
  5. Neue Multibyte-Funktionen

1. Neue Array-Hilfsfunktionen

Die folgenden Varianten von Array-Hilfsfunktionen werden in PHP 8.4 hinzugefügt:

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

Diese Funktionen benötigen ein Array und eine Rückruffunktion und geben Folgendes zurück:

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.

注: array_find() は、最初に一致した要素のみを取得します。複数の一致がある場合は、array_filter() の使用を検討してください。

キーと値のペアとコールバック関数を含む配列が指定された場合:

$array = ['1'=> 'red', '2'=> 'purple', '3' => 'green']

function hasLongName($value) {
  return strlen($value) > 4;
}

新しい関数の使用方法は次のとおりです:

  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. 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"
    
  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. プロパティフック

PHP 8.4 ではプロパティ フックが導入され、クラスのプライベート プロパティまたは保護されたプロパティにアクセスして変更するためのより洗練された方法が提供されます。以前は、開発者はゲッター、セッター、およびマジック メソッド (__get および __set) に依存していました。今後は、get フックと set フックをプロパティに直接定義できるため、定型コードが削減されます。

セミコロンでプロパティを終了する代わりに、コード ブロック {} を使用してプロパティ フックを含めることができます。
これらのフックはオプションであり、独立して使用できます。どちらかを除外することで、プロパティを読み取り専用または書き込み専用にすることができます。

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"

$value が整数の場合、次のエラー メッセージがスローされます:

PHP Fatal error:  Uncaught InvalidArgumentException: Expected a string for full name, integer given.

$value が空の文字列の場合、次のエラー メッセージがスローされます:

PHP Fatal error:  Uncaught ValueError: Name must be non-empty

3. 括弧なしの「new」

PHP 8.4 ではより簡単な構文が導入され、新しく作成されたオブジェクトにかっこなしでメソッドをチェーンできるようになりました。これは小さな調整ですが、コードがよりクリーンになり、冗長さが少なくなります。

(new MyClass())->getShortName();  // PHP 8.3 and older
new MyClass()->getShortName();  // PHP 8.4

新しく作成したオブジェクトのメソッドをチェーンするだけでなく、プロパティ、静的メソッドとプロパティ、配列アクセス、さらにはクラスの直接呼び出しをチェーンすることもできます。例:

new MyClass()::CONSTANT,
new MyClass()::$staticProperty,
new MyClass()::staticMethod(),
new MyClass()->property,
new MyClass()->method(),
new MyClass()(),
new MyClass(['value'])[0],

4. 暗黙的に null を許可するパラメータ宣言は非推奨になりました

PHP 8.4 より前では、パラメーターの型が X の場合、X を null 許容として明示的に宣言しなくても、null 値を受け入れることができました。 PHP 8.4 以降、型ヒントで null 可能であると明確に指定しない限り、null パラメータ値を宣言できなくなりました。そうしないと、非推奨の警告がトリガーされます。

function greetings(string $name = null)  // fires a deprecation warning

警告を回避するには、型宣言で疑問符 (?) を使用して、パラメーターが null になれることを明示的に指定する必要があります。

function greetings(?string $name)

または

function greetings(?string $name = null)

5. 新しいマルチバイト関数

マルチバイト文字列は、各文字が 1 バイト以上のストレージを使用できる一連の文字です。これは、日本語や中国語など、複雑な文字や非ラテン文字を使用する言語でよく見られます。 PHP には、mb_strlen()、mb_substr()、mb_strto lower()、mb_strpos() などのマルチバイト関数がいくつかあります。ただし、trim()、ltrim()、rtrim()、ucfirst()、lcfirst などの一部の関数は、 () などには、直接マルチバイトに相当するものがありません。

PHP 8.4 のおかげで、新しいマルチバイト関数が追加されます。これらには、mb_trim()、mb_ltrim()、mb_rtrim()、mb_ucfirst()、mb_lcfirst() が含まれます。これらの関数は、追加の $encoding パラメータを備えた元の関数シグネチャに従います。
新しい mb_functions について説明しましょう:

  1. mb_trim():

    マルチバイト文字列の先頭と末尾からすべての空白文字を削除します。

    関数シグネチャ:

      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 {}
    

    パラメータ:

    • $string: トリミングされる文字列。
    • $characters: トリミングされる文字のリストを含むオプションのパラメーター。
    • $encoding: エンコーディング パラメーターは、文字列の解釈に使用される文字エンコーディングを指定し、マルチバイト文字が正しく処理されるようにします。一般的なエンコーディングには UTF-8 が含まれます。
  2. mb_ltrim():

    マルチバイト文字列の先頭からすべての空白文字を削除します。

    関数シグネチャ:

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

    マルチバイト文字列の末尾からすべての空白文字を削除します。

    関数シグネチャ:

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

    指定されたマルチバイト文字列の最初の文字をタイトルケースに変換し、残りの文字は変更しないままにします。

    関数シグネチャ:

      function mb_ucfirst(string $string, ?string $encoding = null): string {}
    
  5. mb_lcfirst():

    mb_ucfirst() に似ていますが、指定されたマルチバイト文字列の最初の文字を小文字に変換します。

    関数シグネチャ:

      function mb_lcfirst(string $string, ?string $encoding = null): string {}
    

結論

このブログで、PHP 8.4 で今後予定される変更点のいくつかについて概要を理解していただければ幸いです。新しいバージョンでは、開発者のエクスペリエンスを向上させるエキサイティングなアップデートが導入されるようです。正式リリースされたら早速使ってみたいと思います。
詳細と最新情報については、公式 RFC ページをご覧ください。

Das obige ist der detaillierte Inhalt vonPHP – Entdecken Sie das Neueste und Beste. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn