PHP 7.2の新機能の紹介
この記事で共有した内容は、PHP 7.2 の新機能の紹介に関するもので、必要な友人は参考にしてください。
PHP 7.2 は 2017 年 11 月 30 日に正式にリリースされました。このリリースには、より良いコードの作成に役立つ新しい機能、機能、最適化が含まれています。この記事では、PHP 7.2 の最も興味深い言語機能をいくつか紹介します。
変更の完全なリストは、「コメントリクエスト」ページでご覧いただけます。
主要な改善点
パラメータの型宣言
PHP5 以降、関数パラメータの予想される宣言型を指定できるようになりました。間違ったタイプの引数が渡されると、PHP はエラーをスローします。
パラメータの型宣言 (型ヒントとも呼ばれます) は、関数またはクラス メソッドに渡されると予想されるパラメータの型を指定します。
これが例です:
class MyClass { public $var = 'Hello World'; }$myclass = new MyClass;function test(MyClass $myclass){ return $myclass->var; }echo test($myclass);
このコードでは、テスト関数には MyClass インスタンスが必要です。パラメータのデータ型が正しくないと、致命的なエラーが発生します。
Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of MyClass, string given, called in /app/index.php on line 12 and defined in /app/index.php:8
PHP 7.2 以降、型ヒントをオブジェクト データに使用できるようになり、この改善により、汎用オブジェクト型を関数またはメソッドのパラメーターとして使用できるようになりました。以下に例を示します:
class MyClass { public $var = ''; }class FirstChild extends MyClass { public $var = 'My name is Jim'; }class SecondChild extends MyClass { public $var = 'My name is John'; }$firstchild = new FirstChild;$secondchild = new SecondChild;function test(object $arg) { return $arg->var; }echo test($firstchild);echo test($secondchild);
上の例では、テスト関数を 2 回呼び出し、毎回異なるオブジェクトを渡しました。これは、PHP の以前のバージョンでは前例のないことでした。
Docker での PHP 7.0 および PHP 7.2 のタイプ ヒントのテスト。
オブジェクトの戻り値の型宣言
変数の型が関数パラメータの期待される型を指定する場合、戻り値の型も期待される型を指定できます。
戻り値の型宣言は、関数が返す必要がある期待される型を指定します。
PHP 7.2 以降、戻り値の型を使用してオブジェクトのデータ型を宣言できるようになりました。以下に例を示します:
class MyClass { public $var = 'Hello World'; } $myclass = new MyClass;function test(MyClass $arg) : object { return $arg; } echo test($myclass)->var;
以前の PHP バージョンでは、次の致命的なエラーがスローされます:
Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10
もちろん、PHP 7.2 コードは「Hello World」を出力します。
パラメータ型の一般化
PHP では現在、サブクラスとその親クラスまたはインターフェイスのパラメータ型の違いは許可されていません。 それはどういう意味ですか?
次のコードを参照してください:
<?phpclass MyClass { public function myFunction(array $myarray) { /* ... */ } }class MyChildClass extends MyClass { public function myFunction($myarray) { /* ... */ } }
ここでは、サブクラスのパラメータの型を省略しています。 PHP 7.0 では、次の警告が生成されます:
Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8
PHP 7.2 では、コードを中断することなくサブクラスの型を無視できます。このソリューションにより、すべてのサブクラスを更新しなくても、ライブラリ内のクラスをアップグレードして型ヒントを使用できるようになります。
リスト構文の末尾のカンマ
PHP 配列の最後の要素で末尾のカンマを使用することは正当な構文であり、新しい要素を追加するときにカンマの欠落エラーを簡単に回避するために推奨される場合があります。 PHP 7.2 以降、名前空間のグループ化では末尾のカンマを使用できます。
RFC といくつかのサンプル コードの雰囲気を得るには、「リスト構文の末尾のカンマ」を参照してください。
セキュリティの向上
パスワード ハッシュの Argon2
Argon2 は、2015 パスワード ハッシュ アルゴリズム コンペティションで優勝した強力なハッシュ アルゴリズムであり、PHP 7.2 では、Bcrypt アルゴリズムの安全な代替品として使用されます。
PASSWORD_ARGON2I 定数が PHP の新しいバージョンで導入され、password_* シリーズの関数で使用できるようになりました:
password_hash('password', PASSWORD_ARGON2I);
1 つのコスト要素のみを使用する Bcrypt とは異なり、Argon2 は次のように区別するために 3 つのコスト要素を使用します。
- ハッシュ計算の定義 期間中に消費される必要があるメモリオーバーヘッドの量 (KiB) (デフォルト値は 1 < 係数で、ハッシュ計算で使用される並列スレッドの数を設定するために使用されます (デフォルト値は 2)
- 次の 3 つの新しい定数はデフォルトのコスト係数を定義します:
- PASSWORD_ARGON2_DEFAULT_MEMORY_COST
- PASSWORD_ARGON2_DE FAULT_THREADS
- 例を次に示します: Argon2 パスワード ハッシュの詳細を参照してください。
$options = ['memory_cost' => 1<<11, 'time_cost' => 4, 'threads' => 2]; password_hash('password', PASSWORD_ARGON2I, $options);
ログイン後にコピー - Libsodium が PHP コアの一部になります バージョン 7.2 以降、PHP には Sodium ライブラリがコアに含まれています。 Libsodium は、暗号化、復号化、署名、パスワード ハッシュなどを行うためのクロスプラットフォームおよびクロス言語ライブラリです。 このライブラリは、以前は PECL を通じて提供されていました。 Libsodium 関数のリストについては、「クイック スタート」を参照してください。
-
$errcontext
は、エラーが発生したときのローカル変数を含む配列です。これは、エラー ハンドラー set_error_handler() 関数の最後のパラメーターとして使用できます。 WordPress ユーザーにとって PHP 7.2 は何を意味しますか? - 公式 WordPress 統計ページによると、この記事の執筆時点で、WordPress ユーザーの 19.8% のみが PHP 7 にアップグレードしています。 PHP 7.1 を使用しているのは 5% だけです。ユーザーの 40% 以上が依然として PHP 5.6 を使用していることがわかります。さらに恐ろしいのは、ユーザーの 39% 以上がサポートが終了したバージョンの PHP を使用していることです。 2016 年 12 月の時点で、WordPress.org は PHP 5.6 のユーザーに対する公式推奨を、PHP 7 以降の使用を推奨するように変更しました。
Christian Vigh も PHP パフォーマンス テストの比較を発表し、PHP 5.2 は PHP 7 よりも 400% 近く遅いことを発見しました。
2018 年に PHP 5.6 対 PHP 7 対 HHVM のパフォーマンス ベンチマークを実行しました。上記のベンチマークと同様に、PHP 7.2 は PHP 5.6 と比較して 1 秒あたりのトランザクション (リクエスト) 数がほぼ 3 倍実行できることがわかりました。
- WordPress ベンチマーク
- WordPress 4.9.4 PHP 5.6 ベンチマーク結果: 49.18 req/秒
- WordPress 4.9.4 PHP 7.0 ベンチマーク結果: 133.55 req/秒
「PHP 7.2: 標準ライブラリに最新の暗号化を追加した最初のプログラミング言語」も参照してください。
非推奨
ここでは、PHP 7.2 で非推奨となった関数と機能のリストを示します。これらは PHP 8.0 以降はすべて削除されます。
PHP 5.1 の __autoload
関数は spl_autoload_register に置き換えられました。コンパイル中に非推奨の通知が報告されるようになりました。
致命的なエラーがスローされると、$php_errormsg
ローカル変数が作成されます。 PHP 7.2 では、代わりに error_get_last と error_clear_last を使用する必要があります。
create_function()
関数名を使用して関数を作成し、関数のパラメーターと関数本体を関数のリストとして渡すことができます。セキュリティの問題とパフォーマンスの低下のため、非推奨としてマークされており、代わりにカプセル化が推奨されています。 create_function()
可以创建一个具有函数名称的函数,将函数参数和函数体作为该函数的列表传入。因为安全问题和性能表现不佳,它被标记为弃用,鼓励用封装替代。
mbstring.func_overload
ini 设置为非零值已经被标记为弃用。
(unset) cast
是个总是返回 null 的表达式,并且毫无用处。
如果传入第二个参数,parse_str() 将查询字符串解析到数组当中, 否则解析到本地符号表。 因为安全原因, 不建议 在函数作用域中动态设置变量,使用不带第二个参数的 parse_str() 将抛一个弃用通知。
gmp_random()
是平台相关的,将会被废弃。使用 gmp_random_bits() 和 gmp_random_rage() 代替。
each()
在数组上迭代的行为非常像 foreach(),但 foreach() 基于一些原因而成为更优选择,例如它的速度快上 10 倍。现在在循环中使用前者将会抛出一个废弃提示。
assert()
函数检查给定的断言,并在结果为 FALSE 的时候进行相关处理。 带有字符串参数的 assert()
现在已经弃用,因为它有 RCE 漏洞。 zend.assertion ini 选项可以关闭断言表达式。
$errcontext
mbstring.func_overload
ini がゼロ以外の値に設定されている場合、非推奨としてマークされています。
(unset) Cast
は常に null を返す式であり、役に立ちません。
2 番目のパラメーターが渡された場合、parse_str() はクエリ文字列を配列に解析し、それ以外の場合はローカル シンボル テーブルに解析します。 セキュリティ上の理由から、関数スコープで変数を動的に設定することはお勧めできません。2 番目の引数なしで parse_str() を使用すると、非推奨の通知がスローされます。
gmp_random()
はプラットフォームに依存するため、非推奨になります。代わりに gmp_random_bits() と gmp_random_rage() を使用してください。
each()
配列の反復処理は foreach() と非常によく似ていますが、10 倍高速であるなど、いくつかの理由から foreach() の方が適しています。ループ内で前者を使用すると、非推奨のプロンプトがスローされるようになります。 assert()
関数は、指定されたアサーションをチェックし、結果が FALSE の場合に関連する処理を実行します。 文字列パラメータを含む assert()
は、RCE の脆弱性のため非推奨になりました。 zend.assertion ini オプションはアサーション式をオフにします。 PHP 公式ベンチマークは、PHP 7 ではシステムが 1 秒あたり 2 つのリクエストを実行できることを示しています。これは、PHP 5.6 と比較した場合、ほぼ平均的な遅延です。
WordPress 4.9.4 PHP 7.2 ベンチマーク結果: 148.80 req/秒
WordPress 4.9.4 HHVM ベンチマーク結果: 144.76 req/秒
たくさんのことがすべての新しいサードパーティのプラグインとテーマをテストして適切に動作することを確認するのに時間がかかるため、更新するだけでは時間がかかります。多くの場合、まだ終わっていないために時間がかかります。実行している PHP のバージョンがわからない場合は、最も簡単な方法の 1 つは、Pingdom ツールまたは Google Chrome 開発ツールを使用することです。通常、最初の HTTP リクエスト ヘッダーにはバージョンが表示されます。
PHP バージョンを確認してくださいPHP 7.2 へのアップグレード🎜🎜PHP 7.2 はまだ部分的に未完成ですが、まずは試してみることができます。 WordPress ローカル サイトをテストしたり、Docker のような環境でスクリプトをチェックしたり、コマンド ラインからさまざまな PHP バージョンをテストして比較したりできます。 🎜🎜エピローグ🎜🎜 PHP 7.2 に切り替える準備はできましたか?ただし、少なくとも最初に PHP 7 以降に移行していることを願っています。今すぐテストする準備ができていない場合は、スクリプトをアップグレードし、コードを確認し、PHP 7.2 の最初の経験について話してください。 🎜🎜関連する推奨事項: 🎜🎜🎜 Windows と非常に拡張された judy で php7.2 をコンパイルします🎜🎜CentOS7yumインストールPHP7.2インスタンス方法
以上がPHP 7.2の新機能の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
