目次
主要な改善点
パラメータの型宣言
オブジェクトの戻り値の型宣言
パラメータ型の一般化
リスト構文の末尾のカンマ
セキュリティの向上
パスワード ハッシュの Argon2
ここでは、PHP 7.2 で非推奨となった関数と機能のリストを示します。これらは PHP 8.0 以降はすべて削除されます。
WordPress 4.9.4 HHVM ベンチマーク結果: 144.76 req/秒
たくさんのことがすべての新しいサードパーティのプラグインとテーマをテストして適切に動作することを確認するのに時間がかかるため、更新するだけでは時間がかかります。多くの場合、まだ終わっていないために時間がかかります。実行している PHP のバージョンがわからない場合は、最も簡単な方法の 1 つは、Pingdom ツールまたは Google Chrome 開発ツールを使用することです。通常、最初の HTTP リクエスト ヘッダーにはバージョンが表示されます。

PHP 7.2の新機能の紹介

May 24, 2018 pm 02:47 PM
php 導入 新しい機能

この記事で共有した内容は、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 の以前のバージョンでは前例のないことでした。

PHP 7.2の新機能の紹介

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(&#39;password&#39;, PASSWORD_ARGON2I);
ログイン後にコピー

1 つのコスト要素のみを使用する Bcrypt とは異なり、Argon2 は次のように区別するために 3 つのコスト要素を使用します。

  • ハッシュ計算の定義 期間中に消費される必要があるメモリオーバーヘッドの量 (KiB) (デフォルト値は 1 < 係数で、ハッシュ計算で使用される並列スレッドの数を設定するために使用されます (デフォルト値は 2)

  • 次の 3 つの新しい定数はデフォルトのコスト係数を定義します:

  • PASSWORD_ARGON2_DEFAULT_MEMORY_COST

PASSWORD_ARGON2_DEFAULT_TIME_COST

  • PASSWORD_ARGON2_DE FAULT_THREADS

  • 例を次に示します:

    $options = [&#39;memory_cost&#39; => 1<<11, &#39;time_cost&#39; => 4, &#39;threads&#39; => 2];
    password_hash(&#39;password&#39;, PASSWORD_ARGON2I, $options);
    ログイン後にコピー
    Argon2 パスワード ハッシュの詳細を参照してください。
  • Libsodium が PHP コアの一部になります

    バージョン 7.2 以降、PHP には Sodium ライブラリがコアに含まれています。 Libsodium は、暗号化、復号化、署名、パスワード ハッシュなどを行うためのクロスプラットフォームおよびクロス言語ライブラリです。
  • このライブラリは、以前は PECL を通じて提供されていました。 Libsodium 関数のリストについては、「クイック スタート」を参照してください。

    「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() を使用すると、非推奨の通知がスローされます。 WordPress PHP 7.1 stats

    gmp_random() はプラットフォームに依存するため、非推奨になります。代わりに gmp_random_bits() と gmp_random_rage() を使用してください。

    each() 配列の反復処理は foreach() と非常によく似ていますが、10 倍高速であるなど、いくつかの理由から foreach() の方が適しています。ループ内で前者を使用すると、非推奨のプロンプトがスローされるようになります。

    assert() 関数は、指定されたアサーションをチェックし、結果が FALSE の場合に関連する処理を実行します。 文字列パラメータを含む assert() は、RCE の脆弱性のため非推奨になりました。 zend.assertion ini オプションはアサーション式をオフにします。
    • $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 以降の使用を推奨するように変更しました。

    WordPress PHP 7.1 Statistics

    上記のデータパフォーマンスは、PHP 7 の方が速いようで、快適なものではありません。以下に統計をいくつか示します:

    WordPress benchmarks

    PHP 公式ベンチマークは、PHP 7 ではシステムが 1 秒あたり 2 つのリクエストを実行できることを示しています。これは、PHP 5.6 と比較した場合、ほぼ平均的な遅延です。

    • 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/秒

    WordPress 4.9 .4 PHP 7.1 ベンチマーク結果: 134.24 req/秒

    Check version of PHP

    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 バージョンを確認してください

    これは、ホストが X-Powered-By ヘッダーの値を変更しないことに依存します。変更されている場合、PHP のバージョン情報が表示されない場合があります。その場合は、FTP 経由でファイルをアップロードする必要があります。または、常にホストに尋ねます。

    PHP 7.2 へのアップグレード🎜🎜PHP 7.2 はまだ部分的に未完成ですが、まずは試してみることができます。 WordPress ローカル サイトをテストしたり、Docker のような環境でスクリプトをチェックしたり、コマンド ラインからさまざまな PHP バージョンをテストして比較したりできます。 🎜🎜エピローグ🎜🎜 PHP 7.2 に切り替える準備はできましたか?ただし、少なくとも最初に PHP 7 以降に移行していることを願っています。今すぐテストする準備ができていない場合は、スクリプトをアップグレードし、コードを確認し、PHP 7.2 の最初の経験について話してください。 🎜🎜関連する推奨事項: 🎜🎜🎜 Windows と非常に拡張された judy で php7.2 をコンパイルします🎜🎜

    Linuxにphp7.2をインストールする方法

    CentOS7yumインストールPHP7.2インスタンス方法

    以上がPHP 7.2の新機能の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

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

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

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

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

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

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用して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での後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

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

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

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

See all articles