新しいバージョンの PHP を使用しているため、いくつかの新機能を理解する必要があり、その一部は開発中に使用できるので、なぜ PHP のバージョンをアップグレードする必要があるのでしょうか。利益は損失を上回ります!
そこで、いくつかの機能を整理しましたが、これらは完全ではなく追加される可能性があります
PHP 5.3 の新機能
1. PHP 5.3 の新機能
1. 名前空間のサポート (Namespace)
2. 遅延静的バインディングのサポート
3. クロージャと Lambda /Anonymous 関数のサポート
5. 2 つの新しいマジック メソッド __callStatic() と __invoke()
を追加しました。6. Nowdoc 構文を追加しました。
7. Const はクラス外の定数の定義にも使用できます
8. 三項演算子は、ショートカットの書き込みメソッド:
9. 200 ~ 399 の範囲の HTTP ステータス コードはアクセス成功とみなされます
10. 静的メソッドの動的呼び出しをサポート
名前空間が PHP5.3 によってもたらされた最も重要な新機能であることは疑いの余地がありません。名前空間の概念を利用すると、大規模なサイトを開発する際に、異なるパッケージ内のクラス名や変数名の競合を避けながら、柔軟な構造を設計することが容易になります。
1 |
PHP5.3 では、異なる名前空間を指定する必要があるだけです。名前空間の区切り文字はバックスラッシュです。
select.php
1 |
メソッド呼び出し
call.php
1 |
PHP5 では、self キーワードまたはクラス内の __CLASS__ を通じて現在のクラスを決定または呼び出すことができます。しかし、これをサブクラスで呼び出すと、結果が親クラスになります。親クラスから継承するときに、静的メンバーがすでにバインドされているためです。 例:
01 |
上記のコードの出力結果は次のとおりです:
A
これは当初期待していたものとは異なります。サブクラスの対応する結果。
PHP 5.3.0 では、現在のクラスを参照するための static キーワードが追加され、遅延静的バインディングが実装されます。
01 |
上記のコードの出力は次のとおりです:
B
3. goto ステートメントのサポート
ほとんどのコンピューター プログラミング言語は、無条件ジャンプ ステートメント goto をサポートしており、プログラムが goto ステートメントを実行すると、goto ステートメント内のラベルで指定されたプログラム位置にジャンプして実行を継続します。 goto ステートメントはプログラム フローを不明瞭にし、可読性を低下させる可能性がありますが、深くネストされたループや if ステートメントを中断するなど、特定の状況では独自の便利性があります。
01 |
4. クロージャ、Lambda/匿名関数のサポート
クロージャ (Closure) 関数と Lambda 関数の概念は、関数型プログラミングの分野から来ています。たとえば、JavaScript は、クロージャとラムダ関数をサポートする最も一般的な言語の 1 つです。
PHP では、create_function() を通じてコードの実行中に関数を作成することもできます。ただし、問題があります。作成された関数は実行時にのみコンパイルされ、他のコードと同時には実行可能コードにコンパイルされないため、APC のような実行可能コード キャッシュを使用してコードの実行効率を向上させることはできません。
PHP5.3 では、Lambda/匿名関数を使用して、array_map()/array_walk() およびその他の関数のコールバック関数としていくつかの一時的な (使い捨て) 関数を定義できます。
01 |
5. 2 つの新しいマジック メソッド __callStatic() と __invoke()
PHP には元々マジック メソッド __call() があります。オブジェクトの存在しないメソッドが呼び出されたときに、自動的に呼び出されます。新しい __callStatic() メソッドは、静的クラス メソッドにのみ使用されます。クラスに存在しない静的メソッドを呼び出そうとすると、__callStatic() マジック メソッドが自動的に呼び出されます。
01 |
上記のコードを実行すると、出力は次のようになります。オブジェクトメソッド 'runTest'? - オブジェクト呼び出しを通じて静的メソッド 'runTest' を呼び出しますか? - 静的呼び出し
オブジェクトを関数の形式で呼び出すと、__invoke() メソッドが自動的に呼び出されます。
01 |
の使用法は Heredoc と似ていますが、単一引用符を使用します。ヒアドキュメントは二重引用符を使用して宣言する必要があります。
Nowdoc は変数解析を行いません。これは、PHP コードの一部を渡すのに非常に適しています。
01 |
Heredoc を介した静的変数、クラス メンバー、およびクラス定数の初期化をサポートします。
01 |
7. Const をクラスの外で使用して定数を定義することもできます
これは通常、PHP で定数を定義する方法です:
1 |
と新しい定数定義メソッドが追加されました:
1 |
8. 三項演算子はショートカットの記述方法を追加します
1 |
元の形式は (expr1) ? (expr2) : (expr3)
If expr1 If 結果True の場合、expr2 の結果が返されます。
PHP5.3 では中間部分を省略して expr1?: expr3 と書くことができる新しい書き方が追加されました
expr1 の結果が True の場合、expr1 の結果が返されます
9 Access の HTTP ステータス コードは、200 ~ 399 の範囲内で成功とみなされます
10. 静的メソッドの動的呼び出しをサポート
01 |
11. ネストされた例外処理 (Exception) をサポートします。
12. 新しいガベージ コレクター (GC) とデフォルトの有効化
2. PHP5.3 でのその他の注目すべき変更点
1. 多くのバグが修正されました
2. php.ini で変数が使用できるようになりました
4. 理論上、Mysqlnd が拡張されました。拡張機能は、以前の MySQL および MySQLi 拡張機能よりも高速に mysql にアクセスします (http://dev.mysql.com/downloads/connector/php-mysqlnd/ を参照)
5. ext/phar、ext/intl、ext/ などの拡張機能fileinfo、ext/sqlite3、および ext/enchant はデフォルトで PHP バインディングとともにリリースされます。 Phar は、Java の jar メカニズムと同様に、PHP プログラムをパッケージ化するために使用できます。
6. ereg 正規表現関数はデフォルトでは使用できなくなりました。より高速な PCRE 正規表現関数を使用してください
PHP 5.4 の新機能
1. 組み込み Web サーバーには単純な組み込み Web サーバーがあります現在のディレクトリをルート ドキュメントとして使用するには、次のコマンドのみが必要です:
# php -S localhost:3300
他のパスも指定できます:
# php -S localhost:3300 -t /path/to/root
ルートも指定できます:
# php -S localhost:3300 router.php
トレイトは、柔軟なコード再利用メカニズムを提供します。つまり、メソッドを定義できるだけで実装できないインターフェイスや、単一の方法でのみ継承できるクラスとは異なります。実際にどう活用するかについては、まだ深く考える必要があります。
マジック定数は __TRAIT__
1 |
01 |
セッションは、$_SESSION["upload_progress_name"] を通じて現在のファイルのアップロードの進行状況情報を取得でき、アップロードの進行状況バーを簡単に実装できます。
6. JsonSerializable インターフェイス
JsonSerializable インターフェイスを実装するクラスのインスタンスは、オブジェクトのプロパティを直接シリアル化する代わりに、json_encode シリアル化の前に jsonSerialize メソッドを呼び出します。
7. デフォルトで mysqlnd を使用します
1 |
9. サポート Class::{expr}() 構文
1 |
10.呼び出し可能な typehint
01 |
11. 関数型ヒントの強化
01 |
12. 新しく追加された $_SERVER["REQUEST_TIME_FLOAT"] は、サービス要求時間をカウントするために使用され、ミリ秒で表されます
1 |
13. Json に理解してもらいます。中国語の方が良い (JSON_UNESCAPED_UNICODE)
1 |
14. 2 進数形式 (2 進数形式)
1 |
PHP 5.4.0 ではパフォーマンスが大幅に向上し、100 を超えるバグが修正されました。
register_globals、magic_quotes、セーフ モードが廃止されました。
マルチバイトのサポートがデフォルトで有効になっていることにも言及する価値があります。
default_charset は ISO-8859-1 から UTF-8 に変更されました。
デフォルトでは、「Content-Type: text/html」です。 ; charset" is send =utf-8",
HTML にメタ タグを記述する必要も、UTF-8 との互換性のために追加のヘッダーを送信する必要もなくなりました。
削除された機能
最後に、過去数年間で非推奨としてマークされたいくつかの機能をまとめました。これらのプロパティには、allow_call_time_pass_reference、define_syslog_variables、highlight.bg、register_globals、register_long_arrays、magic_quotes、safe_mode、zend.ze1_compatibility_mode、session.bug_compat42、session.bug_compat_warn、および y2k_compliance が含まれます。
これらの機能とは別に、magic_quotes がおそらく最大の危険です。以前のバージョンでは、magic_quotes が失敗した場合の影響は考慮されておらず、単純に作成され、SQL インジェクション攻撃から身を守るための措置を講じていないアプリケーションは、magic_quotes によって保護されていました。 PHP 5.4 にアップグレードするときに適切な SQLi 保護対策が実施されていることを確認しないと、セキュリティ上の脆弱性が発生する可能性があります。
その他の変更点と機能
メソッドがコールバックをパラメーターとして受け取る場合の新しい「呼び出し可能」型ヒントがあります。
htmlspecialchars() と htmlentities() では、アジア文字のサポートが強化され、PHP のdefault_charset が php.ini ファイルで明示的に設定されていない場合、デフォルトで ISO-8859-1 ではなく UTF-8 が使用されるようになりました。
セッション ID は、以前のバージョンのように明示的に有効にする必要があるオプションではなく、デフォルトで /dev/urandom (または同等のもの) のエントロピーから生成されるようになりました。
mysqlnd バンドルされている MySQL ネイティブ ドライバー ライブラリは、./configure によってコンパイル時に明示的にオーバーライドされない限り、MySQL と通信するさまざまな拡張機能にデフォルトで使用されるようになりました。
おそらくさらに 100 個の小さな変更と機能が追加されます。 PHP 5.3 から 5.4 へのアップグレードは非常にスムーズですが、移行ガイドを読んで確認してください。以前のバージョンからアップグレードする場合は、もう少し作業が必要になる場合があります。アップグレードを開始する前に、以前の移行ガイドを確認してください。
PHP 5.5 の新機能
新機能と提案のリストは非常に多く、重要性の順ではありません。したがって、すべてを読みたくない場合は、私が個人的に最も興奮している 4 つの機能を以下に示します。
: シンプルなパスワード ハッシュ API
: スカラー型ヒント
: ゲッターとセッター
: ジェネレーター
次に、PHP5.5 の考えられる新機能を見てみましょう。
1. Windows XP および 2003 のサポートを終了します
2.
e 修飾子は、単に単純な文字列の置換を行うのではなく、置換文字列を PHP コードとして評価するように preg_replace 関数に指示するために使用されます。当然のことながら、この動作によりセキュリティ問題が次々と発生します。これが、PHP5.5 でこの修飾子を使用すると非推奨の警告がスローされる理由です。代わりに、preg_replace_callback 関数を使用する必要があります。この変更の詳細については、RFC を参照してください。
3. 新しい関数とクラス
01 |
4. 単純なパスワードハッシュ API
01 |
5. 新しい言語機能と機能強化。
01 |
6. empty() 関数 (および他の式) の呼び出しは連携して機能します
現在、empty() 言語構造は変数に対してのみ使用でき、他の式には使用できません。
empty($this->getFriends()) のような特定のコードはエラーをスローします。 PHP5.5 として、これは有効なコードになります
7. 完全なカテゴリ名を取得します
1 |
8. パラメータジャンプ
1 |
9. スカラー型のヒント
01 |
10. ゲッターとセッター
01 |
11. ジェネレーター
01 |
12. リスト内包表記とジェネレーター式
01 |
13.最後にキーワード
1 |
14.foreach は list()
01 |
15. opcache とともに追加されました。 extension
opcache を使用すると、PHP のパフォーマンスが向上します。他の拡張機能と同様に、静的にコンパイル (?enable-opcache) するか、動的に展開 (zend_extension) することができます。
16. 非変数の配列と文字列も添字の取得をサポートできます
1 |