検索

PHP 8.4 がついに登場し、開発者の作業方法を変革するエキサイティングな変更をもたらします。新しいバージョンが登場するたびに、PHP が今日の Web 開発環境において不可欠なツールであることが証明され続けています。

前提条件

この記事は、PHP プログラミング言語の基本的な知識があることを前提としています。

PHP開発に使用しているソフトウェア

  • Laravel Herd: PHP バージョンと Nginx サーバーの管理に使用されます。

  • PHPStorm: 優れた IntelliSense と AI コパイロットを備えた優れた IDE。

  • Laragon: PHP およびその他のテクノロジをサポートする使いやすいローカル開発環境。


非対称プロパティの可視性 (バージョン 2)??

PHP では、オブジェクト プロパティの可視性は伝統的に対称的でした。これは、プロパティの get 操作と set 操作は同じ可視性 (パブリック、プライベート、保護) を共有する必要がありますが、異なるものにすることはできないことを意味します。

たとえば、プロパティがパブリックの場合、そのプロパティへの読み取りと書き込みの両方がパブリックであり、一方の操作を許可せずに他方の操作を許可する方法はありません。

コンテキスト内で、クラスのプロパティを public に宣言すると、そのプロパティは変更可能になり、クラスの外部から読み取ったり変更したりできるようになります。

ただし、非対称可視性の出現により、プロパティの読み取りと書き込みに個別のスコープを定義できるようになりました。

これは、プロパティがあるコンテキストでは読み取り可能であり、別のコンテキストでは書き込み可能であることを意味し、プロパティへのアクセスと変更の方法をより詳細に制御できるようになります。

class Animal{
  public private(set) string $name;

  public setName(string $foo){
    $ths->name = $foo;
  }
}

$animal = new Animal();

echo $animal->name; // This will run correctly

プロパティを公開し、設定されたプロパティを非公開にすることができます。これは、プロパティをクラス外で更新できないため、不変になることを意味します。

$name プロパティを変更しようとすると、可視性スコープのためプロパティを変更できないことを示すエラーが表示されます。

PHP : Top Features and Improvements

非対称可視性について注意すべきいくつかの重要なポイントを次に示します。

  • set-visibility 宣言ではスペースを使用できません。 private(set) が正しいです。 private( set ) は正しくないため、解析エラーが発生します。

  • プロパティがパブリックとして宣言されている場合、メインの可視性を省略できます。たとえば、public private(set) と private(set) は、public 可視性が暗黙的に示されているため、同じように動作します。

  • 集合演算に対して個別の可視性を持つことができるのは、型指定されたプロパティのみです。これは、PHP では型なしプロパティに非対称の可視性を適用できないことを意味します。

  • 設定された可視性は、取得された可視性と同じか、それよりも制限的である必要があります。たとえば、public protected(set) と protected protected(set) は有効ですが、protected public(set) は構文エラーになります。

他の例も含め、非対称の可視性について詳しく調べてください。

プロパティフック ?

プロパティ フックは PHP 8.4 の優れた機能であり、開発者が変数の読み取りと書き込みを行うメソッドを明示的に作成せずに、get ディレクティブと set ディレクティブを変数に直接追加する方法を導入します。

代わりに、__get および __set マジック メソッドを使用することもできますが、コードがより冗長になり、エラーが発生し、静的分析ツールが機能しなくなる可能性があります。

プロパティ フックの設計と構文は Kotlin のものに似ていると言っても過言ではありませんが、主に C# および Swift プログラミング言語の影響を受けています。

PHP 8.3 では、コンストラクターにプロパティを含むクラスを作成でき、プロパティの読み取りと書き込みが可能になります。

class Animal{
  public private(set) string $name;

  public setName(string $foo){
    $ths->name = $foo;
  }
}

$animal = new Animal();

echo $animal->name; // This will run correctly

このアプローチの問題は、プロパティに書き込むと決めたときに、__set マジック メソッドを使用するか、変数を変更するメソッドを明示的に作成することになり、結果的にコードベースが中断される可能性があることです。

プロパティ フックを使用すると、開発者はプロパティを作成した後、すぐに set ディレクティブを作成できます。

class Car {
    public function __construct(public string $model) { }
}

set ディレクティブに渡される値はプロパティと同じ型でなければならないことに注意してください。そうでない場合はエラーがスローされます。

次に示すように、別の型を set ディレクティブに渡し、プロパティに書き込む前に正しい型に変換できます。

class Car{
  public string $model{
    set (string $value) {
      if(strlen($value) === 0){
        throw new ValueError("Model name cannot be empty");
      }
      $this->model = $value;
    }
  }
}

上記の例は、set ディレクティブから複合型変数を安全に受け取り、それをプロパティで定義された正しい型に解析する方法を示しています。

set ディレクティブに渡す引数がプロパティの型と同じ場合は省略できます。たとえば、以下の 2 つのメソッドは有効であり、同様に動作します。

class Car{
  public string $year{
    set (string|number $value) {
      $year = intval($value);
      if($year year= $value;
    }
  }
}

引数を省略した場合、デフォルトで $value が使用されることに注意してください。この構文は、Kotlin や C# などのプログラミング言語で一般的です。

余分な括弧を使用しないクラスのインスタンス化

この機能が登場する前は、PHP でクラスのメンバーにアクセスするには、クラスの周囲にかっこを追加する必要がありました。

// --------------------------METHOD 1----------------------------
public string $model{
    set (string $value) {
      if(strlen($value) === 0){
        throw new ValueError("Model name cannot be empty");
      }
      $this->model = $value;
    }
 }

// --------------------------METHOD 2----------------------------
public string $model{
    set {
      if(strlen($value) === 0){
        throw new ValueError("Model name cannot be empty");
      }
      $this->model = $value;
    }
  }

新しい Car() 呼び出しをかっこで囲まないと、解析エラーが発生します。

新しい構文を使用すると、追加のかっこを必要とせずにメソッド、プロパティ、定数にアクセスできます。

class Car {

  public function getName(){
    return "Toyota Camry";
  }
}

$carName = (new Car())->getName();

この提案された変更の詳細については、RFC の詳細を確認してください。

新しい配列関数の紹介

新しいヘルパー関数が PHP 8.4 に追加されます。

これらの関数の一部は、すでに Laravel Arr または Collection ヘルパーに実装されています。

array_find_key() 関数

array_find_key($array, $callback) 関数は、$callback メソッドが true を返す最初の要素のキーを返します。条件を満たす要素がない場合、関数は null を返します。

class Animal{
  public private(set) string $name;

  public setName(string $foo){
    $ths->name = $foo;
  }
}

$animal = new Animal();

echo $animal->name; // This will run correctly

array_find() 関数

array_find_key() 関数は、配列を検索し、コールバック関数で定義された条件を満たす最初の要素のキーを返すように設計されています。

array_find_key() と同様に、一致する要素が見つからない場合は null を返します。

class Car {
    public function __construct(public string $model) { }
}

配列内の果物の数量が 10 を超えない場合、関数は null を返します。

array_any() 関数

array_any() 関数は、配列内の少なくとも 1 つの要素が、提供された評価関数で指定された特定の基準を満たすかどうかを判断します。

少なくとも 1 つの要素が条件を満たす場合、関数は true を返します。それ以外の場合は false を返します。

class Car{
  public string $model{
    set (string $value) {
      if(strlen($value) === 0){
        throw new ValueError("Model name cannot be empty");
      }
      $this->model = $value;
    }
  }
}

配列内に 10 より大きい数値がない場合、関数は false を返します。

array_all() 関数

array_all() 関数は、配列内のすべての項目が特定のテストに合格するかどうかをチェックします。各項目に特別なルール (コールバック関数) を適用します。

すべての項目がルールに従ってテストに合格した場合、array_all() は true を返します。

class Car{
  public string $year{
    set (string|number $value) {
      $year = intval($value);
      if($year year= $value;
    }
  }
}

この例では、array_all() 関数は $numbers 配列を反復処理し、コールバック関数を各要素に適用します。コールバックは、数値が 2 で割り切れる (つまり、偶数である) かどうかをチェックします。

配列内のすべての数値が偶数であるため、array_all() 関数は true を返し、「すべての数値は偶数です。」というメッセージが表示されます。

と表示されます。

PHP 8.4 で導入された主な改善点を調べました。これらのアップデートは、強力な新機能や効率の潜在的な向上など、開発者にとって貴重な機能強化を提供します。

例や詳細な説明を含め、すべての更新をさらに詳しく調べるには、公式 PHP 8.4.0 リリース発表ページにアクセスしてください。

最新バージョンへのスムーズな移行を確実にするために、非推奨と下位互換性の変更を忘れずに確認してください。

次は何ですか? ?

  • この記事が気に入ったら、ぜひ他の人と共有してください。

  • ぜひご意見をお聞かせください。下にコメントを入力して会話を続けましょう。乾杯! ?

私をフォローして、PHP、Node.js、TypeScript、PHP の記事をさらにご覧ください。 Twitter や LinkedIn でも私を見つけることができます。

以上がPHP : 主な機能と改善点の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Laravelでフラッシュセッションデータを使用しますLaravelでフラッシュセッションデータを使用しますMar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法PHPのカール:REST APIでPHPカール拡張機能を使用する方法Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキングLaravelテストでの簡略化されたHTTP応答のモッキングMar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプトCodecanyonで12の最高のPHPチャットスクリプトMar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPロギング:PHPログ分析のベストプラクティスPHPロギング:PHPログ分析のベストプラクティスMar 10, 2025 pm 02:32 PM

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

PHPにおける後期静的結合の概念を説明します。PHPにおける後期静的結合の概念を説明します。Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

フレームワークセキュリティ機能:脆弱性から保護します。フレームワークセキュリティ機能:脆弱性から保護します。Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)