これは、待望の PHP 7 シリーズの 2 番目の記事です。最初の記事を読むには、ここをクリックしてください。この記事は、OneAPM エンジニアによって編集および編集されました。
おそらく、PHP 7 の大きなリリースが今年行われることはすでにご存じでしょう。それでは、新しいバージョンの新機能と改善点を見てみましょう。
このシリーズの最初の記事では、PHP 7 の最も重要な非互換性修正のいくつかと 2 つの新機能を紹介しました。この記事では、PHP 7 のさらに 6 つの優れた機能を見ていきます。
Unicode コード ポイント エスケープ構文
新しく追加されたエスケープ文字 ?? u を使用すると、PHP 文字列内で Unicode 文字コード ポイント (16 進数) を明示的に指定できます:
ここで使用される構文は u{CODEPOINT} です。たとえば、この緑色のハートの形 ? は、PHP 文字列 __"u{1F49A}"__ として表すことができます。
Null マージ演算子
もう 1 つの新しい演算子?? Null マージ演算子 ?? は、実際には伝説的な三項演算子です。 Null でない場合は左のオペランドが返され、それ以外の場合は右のオペランドが返されます。
ポイントは、左のオペランドが存在しない変数の場合、それに気付かないということです。これは isset() に似ており、 ?: の短い三項演算子とは異なります。
この演算子を連鎖させて、指定されたコレクションの最初の非 null 値を返すこともできます。
$config = $config ?? $this->config ?? static::$defaultConfig;
Call-on-Bind クロージャ
以前は、PHP 5.4 に Closure->bindTo() と Closure::bind() を追加することで、$this とバインディングの呼び出しスコープを同時にまたは個別に変更できました。 , 繰り返しクロージャを作成します。
PHP 7 では、Closure->call() を通じて $this と呼び出しスコープを同じオブジェクトにバインドすることで、呼び出し時に上記の機能を実現する便利な方法が追加されました。このメソッドは、次のようにオブジェクトを最初のパラメータとして受け取り、次に他のパラメータをクロージャに渡します:
class HelloWorld { private $greeting = "Hello";}$closure = function($whom) { echo $this->greeting . ' ' . $whom; }$obj = new HelloWorld();$closure->call($obj, 'World'); // Hello World
グループ使用宣言
同じ名前空間から複数のクラスをインポートしたことがあり、IDE がそれを自動的に行うことができる場合, きっと幸せになれますよ。他の皆様のために、簡単にするために、PHP 7 にはグループ使用宣言が追加されました。これにより、複数の同様のインポートを迅速かつ明確に指定できます:
// Originaluse Framework\Component\SubComponent\ClassA;use Framework\Component\SubComponent\ClassB as ClassC;use Framework\Component\OtherComponent\ClassD;// With Group Useuse Framework\Component\{ SubComponent\ClassA, SubComponent\ClassB as ClassC, OtherComponent\ClassD};
use function と一緒に使用したり、定数インポートや関数インポートで const を使用したりすることもできます。混合インポートもサポートされています。
use Framework\Component\{ SubComponent\ClassA, function OtherComponent\someFunction, const OtherComponent\SOME_CONSTANT};
ジェネレーターの改良点
ジェネレーターの戻り値ジェネレーターには 2 つの大きな新機能があります。 1 つ目はジェネレーターの戻り式です。これを使用すると、ジェネレーターが完了 (正常に) したときに値を返すことができます。
PHP 7 より前では、値を返そうとするとエラーが発生していました。ただし、$generator->getReturn() を呼び出して戻り値を取得できるようになりました。
ジェネレーターがまだ戻っていない場合、またはキャッチされない例外がスローされた場合、$generator->getReturn() を呼び出すと例外がスローされます。
ジェネレーターが完了したが戻らなかった場合は null を返します。
例は次のとおりです:
function gen() { yield "Hello"; yield " "; yield "World!"; return "Goodbye Moon!";}$gen = gen();foreach ($gen as $value) { echo $value; }// Outputs "Hello" on iteration 1, " " on iterator 2, and "World!" on iteration 3echo $gen->getReturn(); // Goodbye Moon!ジェネレーター デリゲート
2 番目の機能はさらに魅力的です。ジェネレーター デリゲートです。これにより、配列、イテレータ、または別のジェネレータなど、それ自体を反復処理できる別の反復可能な構造体を返すことができます。
重要なのは、部分構造の反復は、再帰的構造ではなく、単一の平面構造のように、最も外側のプリミティブ ループによって実行されることです。
ジェネレーターにデータや例外を送信する場合も同様です。これらのデータまたは例外は、呼び出される直接コントロールと同様に、サブ構造に直接渡されます。
これは、次のような
各反復で、次の出力が行われます:
"Hello"
" "
"World! "
"Goodbye"
" "
"Moon!"
言及する価値のある 1 つの注意点は、部分構造は独自のキーを生成できるため、複数の反復で同じキーを返す可能性が完全にあります。これがあなたにとって重要な場合は、それを回避する方法を自分で見つける必要があります。
内部例外
PHP では、致命的なエラーとキャッチ可能な致命的なエラーは常に処理不可能か、処理が困難です。しかし、内部例外を使用すると、これらのエラーの多くで例外がスローされる可能性があります。
致命的なエラーまたはキャッチ可能な致命的なエラーが発生した場合、例外がスローされるため、それを適切に処理できるようになりました。これを処理しないと、キャッチされない例外のような従来の致命的なエラーになります。
これらの例外は EngineException オブジェクトです。すべてのユーザー例外とは異なり、これらは Exception クラスを継承しません。これは、現在 Exception クラスをキャッチするコードが将来的に致命的なエラーをキャッチしないようにするためです。これにより、下位互換性が維持されます。
将来、従来の例外と内部例外の両方をキャッチしたい場合は、それらの新しい共有親クラス BaseException をキャッチする必要があります。
さらに、eval() で処理されたコード内の解析エラーは ParseException をスローし、型の不一致は TypeException をスローします。
例:
try { nonExistentFunction();} catch (\EngineException $e) { var_dump($e);}object(EngineException)#1 (7) { ["message":protected]=> string(32) "Call to undefined function nonExistantFunction()" ["string":"BaseException":private]=> string(0) "" ["code":protected]=> int(1) ["file":protected]=> string(17) "engine-exceptions.php" ["line":protected]=> int(1) ["trace":"BaseException":private]=> array(0) { } ["previous":"BaseException":private]=> NULL}
OneAPM for PHP 能够深入到所有 PHP 应用内部完成应用性能管理 能够深入到所有 PHP 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。
即将到来!
距离 PHP 7.0.0 发布只有八个月了(译者翻译时所剩时日不多),该版本很可能是 PHP 历史上性能最快的一版。虽然现在它只具备内部测试品质(目前 RC5 已可以下载) ,但 PHP 7 的确让人期待。
并且,你能帮助它变得更好。
测试你的代码
使用 Rasmus’s 的 PHP 7 vagrant 沙盒,开始运行你的测试套件,或执行常规的质量检验。向项目报告错误,并定期重试。
帮助 GOPHP7-EXT
使用 PHP 7 的一大障碍是确保更新所有扩展使之与新的 Zend Engine 3 兼容。
如果你使用的扩展较为小众,没有得到其维护者足够的关注??或者你使用自己的扩展??请查看 GoPHP7-ext 项目从而确保 PHP 7 发布后一切都准备妥当。
书写文档
PHP 7 中的每个新功能都有一个 RFC 。你可以在 PHP.net 维基 找到他们,并在此基础上写新文档。你可以在 在线GUI 环境下 写,包括提交(如果你有 karma)或提交补丁以供审核。
总结
PHP 7 将是伟大的!
PHP是全世界最好的语言,没有之一 :)
抓紧测试你的应用程序。帮助迁移扩展。
P.S. 你已经在使用 PHP 7 了么?你对新功能有何感受?是否有你不满意,或者不喜欢的地方?你认为你会何时升级?让我们知道你的想法!
分享你的想法,尽在 APM俱乐部!
OneAPM for PHP 能够深入到所有 PHP 应用内部完成应用性能管理 能够深入到所有 PHP 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

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

WebStorm Mac版
便利なJavaScript開発ツール

ホットトピック









