ホームページ >バックエンド開発 >PHPチュートリアル >HHVMのPHP交換であるハックを見てください
以前に作成したVagrantボックスを使用して、この記事からコードスニペットを実行できます。
キーテイクアウトStrictモードの入力は、厳密なモードであっても、すべての変数に注釈を付ける必要はありません。これは、ハックがローカル変数タイプを推測するのに十分スマートであるためです。タイプの注釈は、クラスのプロパティ、関数引数、および戻り値にのみ必要です。そうでなければ、あなたのコードの理解に役立つ可能性がある場合は、ローカル変数に注釈を付けることをお勧めします。 例を見てみましょう:
このセクションのサンプルコードはwww/type-checker/index.phpにあり、ブラウザをhttp:// localhost:8080/type-checker/。
>>。
最初のエラーメッセージは驚くことではありません:add(1、 "a")を呼び出して、add()が整数であると予想されるため、エラーが生成されます。2番目のエラーメッセージはより予想外です。Add_Array([1、 "a"])を呼び出すことでエラーは生成されません。実際には、エラーを生成するAdd_array()の内側に(1、 "a")を追加する呼び出しです! [1、 "a"]がエラーがトリガーされると予想できたはずです。
問題は、HHVMランタイムチェックがパフォーマンスに影響を与えないためにまばらであるということです。オブジェクトを繰り返しません。この時点で、おそらくハックタイプシステムの有用性に疑問を呈するでしょう!しかし、心配しないでください、簡単な答え、「タイプチェッカー」:前の例のものを含む任意のタイプの不一致をキャッチします。 HHVMリポジトリで探してはいけませんが、Facebookからまだリリースされていません。タイプチェッカーは、変更のためにファイルを監視するサーバーとして実装されます。変更を検出するたびに、変更されたファイルをスキャンしてエラーの依存関係をスキャンします。エラーはリアルタイムで報告されるため、コードを実行する必要さえありません。 FBのスケールでも非常に速く動作するように設計されています。
今、あなたはタイプシステムがうまく機能することを確信すべきですが、利点は何ですか?開発者エラーをリアルタイムでキャッチし、より効率的なコードを作成することができます。PHPADD()関数は、最初に$ Aと$ B(つまり、文字列、null、…)のタイプをチェックする必要があります。追加を実行します。一方、上記のadd()関数は、アセンブリ言語で非常に高速な動作である2つの非ヌル整数を追加します(HHVM JITによって生成されます)。開発者として、すでにPHPタイプのヒントとPHPDOCアノテーションを使用している場合、厳密なモードに切り替えることは簡単です。コードはより安全かつ高速になります。スクーチナイザーのような既存のQAツールの一部は、リアルタイムではありませんが、コードをチェックするためにタイプの推論をすでに使用していることに注意してください。
動的に型付けされた性質のためにPHPを主に使用する場合、おそらく非強制モードに固執したいと思うでしょう。
ユーザー属性過去数年間、注釈の使用はPHPの世界で劇的に増加しました。注釈に精通していない人にとっては、クラス、インターフェイス、特性、変数、機能/方法に追加できるメタデータです。
教義ORMは、おそらく注釈を広範囲に使用した最初のPHPプロジェクトの1つです。以下は、教義のドキュメントからのモデル構成の例です。
<span><span><?hh // strict </span></span><span> </span><span><span>require "/vagrant/www/xhp/php-lib/init.php"; </span></span><span> </span><span><span>// ... </span></span><span> </span><span><span>function add(int $a, int $b): int { </span></span><span> <span>return $a + $b; </span></span><span><span>} </span></span><span> </span><span><span>// ERROR(calling "add()" on l.17) : Argument 2 passed to add() must be an </span></span><span><span>// instance of int, string given </span></span><span><span>echo <p>add(1, "a") = {add(1, "a")}</p>; </span></span><span> </span><span><span>// ERROR(calling "add()" on l.22) : Argument 2 passed to add() must be an </span></span><span><span>// instance of int, string given </span></span><span><span>function add_array(array<int> $a): int { </span></span><span> <span>return array_reduce($a, "add", 0); </span></span><span><span>} </span></span><span> </span><span><span>echo <p>add_array([1, "a"]) = {add_array([1, "a"])}</p>;</span></span>
ユーザー属性は、当然のことながら、反射APIからアクセスされることに注意する必要があります。また、クラスのプロパティに注釈を付けるためのサポートはまだ実装されていることに注意してください。 このセクションのサンプルコードはwww/attributes/index.phpにあり、ブラウザをhttp:// localhost:8080/attributes/。
に向けて出力を見ることができます。xhp
この記事の最初のコード例から使用しているように、今ではXHPが何であるかの前兆があるはずです。 Facebookを引用して、より完全な定義については、「XHPは、XMLドキュメントフラグメントが有効なPHP式になるように言語の構文を補強するPHP拡張機能です。」。 XHPはPHP拡張機能として利用可能であり、HHVMにはネイティブサポートがあることに注意してください。マークアップを検証して、無効なHTMLを記述できないようにします - 閉鎖タグを欠いている、パラメーター名のタイプミスを見逃していると考えてください。
ある程度のコンテキストエスケープを提供します。エンジンがあなたのレンダリングを認識しているため、XSS攻撃を防ぐためにHTMLと属性値を適切に逃れることができます。既存のタグを拡張またはラップすることで、独自のタグを作成できます。
その他の機能
<span><span><?php </span></span><span><span>/** @Entity */ </span></span><span><span>class Message </span></span><span><span>{ </span></span><span> <span>/** @Column(type="integer") */ </span></span><span> <span>private $id; </span></span><span> <span>/** @Column(length=140) */ </span></span><span> <span>private $text; </span></span><span> <span>/** @Column(type="datetime", name="posted_at") */ </span></span><span> <span>private $postedAt; </span></span><span><span>}</span></span>この記事でカバーされていないHHVMエコシステムについては、何を含めるかを選択しなければならなかったため、Facebookはまだすべてのコードとドキュメントをリリースしていないためです。
言及する価値があるいくつかのことは、FastCGIと統合デバッガーの最近のサポートです。
Facebookは、自動完了、構文の強調表示、共同編集などを特徴とするWebベースのIDEである「FBIDE」も紹介しています。後で利用できると予想されます。
この記事を準備するために使用したFacebookチームのいくつかの講演やスライドで詳細情報を見つけることができます。キース・アダムスからの「PHPを真剣に受け止める」講演を聞いて、ジュリアン・ヴェルラゲットからの別の素晴らしい講演を聞いて、ハックのことを初めて聞きました。 Sara Golemonの素敵なスライドも私には本当に役に立ちました。
Facebookは、HHVMのPHPで機能パリティを提供することを約束しています。昨年末までに、HHVMは、最も人気のある20のPHPフレームワークの単体テストの98.5%をすでに合格することができました。それ以来、状況はわずかに改善されています
今日の時点で、HHVMは、より少ないメモリを消費しながら、PHPよりも速くPHPコードを実行します。これは、パリティが最終的に達成されたときに、HHVMを支持する上で大きな利点になります。それに加えて、タイプチェッカーの助けを借りてさらにパフォーマンスを獲得し、コードの安全性を向上させるためにハックの導入を開始できます。漸進的なタイピングとハックの事実のおかげで、コードベース全体を一度に変換する必要がないことを忘れないでくださいPHPは相互運用可能です。今から数か月後、Facebookからより多くのドキュメントとツールが期待できます。 Githubでプロジェクトに貢献することで支援することもできます。
PHPコミュニティが報告した問題の1つは、おそらく採用の大きな障害であることです。PECL拡張のサポートがないことです。これを緩和するために、FacebookにはHHVMターゲットのPHP拡張機能を自動的にコンパイルできるツールがあります。ただし、成功率は100%からはほど遠いものです。ここで役立つもう1つのことは、HHVMの拡張機能を開発することは、PHPの開発よりもはるかに簡単であるということです。
HHVMがFacebookだけで裏付けられているという事実と、HHVMに貢献する前にCLAに署名する必要性は、他の人に厄介に思えます。私は個人的に、かなりの量の競争がPHPの将来にとって素晴らしいことだと思います。
結論として、Facebookチームが彼らが行った素晴らしい仕事に感謝し、それをオープンソースにしたいと思います。将来のHHVMとハックに関するSitePointの記事をもっと見たい場合は、以下にコメントを追加することでトピックを提案することをheしないでください。 ハックPHP交換HHVM
に関するよくある質問(FAQ)HACK PHP交換HHVMとは何ですか?
HACK PHP置換HHVMは、HIPHOP仮想マシンとしても知られており、ハックとPHPで書かれたプログラムを実行するために設計されたオープンソース仮想マシンです。 HHVMは、PHPが提供する開発の柔軟性を維持しながら、ジャストインタイム(JIT)コンピレーションアプローチを使用して優れたパフォーマンスを実現します。
HHVMは、その実行において従来のPHPとは異なります。 PHPは実行時にコードを解釈しますが、HHVMはPHPまたはハックコードを高レベルのバイトコードにコンパイルし、その後マシンコードに変換されます。このプロセスにより、パフォーマンスと効率が向上することができます。
ハックは、Facebookが発明したHIPHOP仮想マシン(HHVM)のプログラミング言語です。これはPHPの方言であり、静的タイピング、タイプアノテーション、ジェネリックなどの新機能が含まれています。これらは従来のPHPでは利用できません。 PHPを改善するいくつかの機能。潜在的なランタイムエラーを防ぐことができる静的タイピングが含まれています。また、非同期プログラミングをサポートし、I/O操作のより効率的な取り扱いを可能にします。さらに、ハックには、高性能で強力なデータ構造であるコレクションが含まれています。 JITコンピレーションプロセスの性質により、いくつかの違いがあります。ただし、HHVMは「HHVM-Autoload」と呼ばれるツールを提供します。これは、既存のPHPコードをHHVMに移行するのに役立ちます。
HHVMなしでハッキングを使用できますか?
ハックは静的に型付けの言語ですか?これは、変数のタイプがコンパイル時にチェックされ、潜在的なランタイムエラーを防ぐのに役立つことを意味します。 、静的タイピング、非同期プログラミング、コレクションを含む。これらの機能は、コードの安全性、効率、パフォーマンスを改善するのに役立ちます。
HHVMとハックの使用を開始するには、システムにHHVMをインストールする必要があります。インストールしたら、HHVMランタイムを使用してコードをハッキングして実行できます。また、いくつかのリソースとチュートリアルもオンラインで入手できます。
以上がHHVMのPHP交換であるハックを見てくださいの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。