PHP : 主な機能と改善点
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 プロパティを変更しようとすると、可視性スコープのためプロパティを変更できないことを示すエラーが表示されます。
非対称可視性について注意すべきいくつかの重要なポイントを次に示します。
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 < 2000){ throw new ValueError("We only accept cars produced in year 2000 and above"); } $this->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 < 2000){ throw new ValueError("We only accept cars produced in year 2000 and above"); } $this->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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。
