HHVMのPHP交換であるハックを見てください
以前に作成したVagrantボックスを使用して、この記事からコードスニペットを実行できます。
キーテイクアウトHHVMのPHP置換である
- ハックは、静的に型付けられた言語です。つまり、アプリケーション内のすべての変数にタイプを提供する必要があります。ただし、Hackは「Strict」モードでのみタイプが予想される「段階的なタイピング」システムを使用します。それでも、Hackはローカル変数タイプを推測するのに十分スマートです。
- Hackは、Facebookの注釈の実装であるユーザー属性を含むPHPを改善するいくつかの機能を導入します。XHPは、XMLドキュメントフラグメントが有効なPHP式になるように言語の構文を増強するPHP拡張です。 ハックとHHVMの利点にもかかわらず、PECL拡張のサポートの欠如やHHVMがFacebookのみに支えられているという事実など、採用にはまだ障害があります。ただし、FacebookにはHHVMターゲットのPHP拡張機能を自動的にコンパイルできるツールがあり、HHVMの拡張機能を開発することは、PHPの開発よりも簡単です。
- なぜタイプ?
- 記事の最初の部分では、ハックが実際に静的にタイプされていることがわかりました。これは、アプリケーション内のすべての変数にタイプを提供する必要があることを意味します。リマインダーとして、PHPは動的にタイプされているため、機能引数にタイプヒントを使用できますが、変数を入力する必要はありません。
Facebookのコードベースは、数億回のコードで構成されており、ハッキングに切り替える前にどこにでもタイプを追加することは本当の負担でした。したがって、「段階的なタイピング」が付属しています。ハックは、「厳格な」モードのみでタイプを期待しています。非ストリクトモードでは、それらが存在する場合にのみ考慮されます。
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つです。以下は、教義のドキュメントからのモデル構成の例です。
PHPは、他の多くの言語とは異なり、注釈のサポートが組み込まれていません。ただし、Doctrine Annotation Libraryは、Docblocksからメタデータを抽出するために広く使用されています。 PHPでの注釈のための組み込みサポートを提案するRFCは、2011年に拒否されました。
ユーザー属性は、AnnotationsのFacebook実装です。それらは>に囲まれており、それらの構文は教義の注釈とは少し異なります:<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と属性値を適切に逃れることができます。既存のタグを拡張またはラップすることで、独自のタグを作成できます。
- 例を見てみましょう:
- このセクションの完全なサンプルコードはwww/hhxhp/index.phpにあり、ブラウザをhttp:// localhost:8080/hhxhp/。
- >
この例では、
タグをレンダリングするカスタム タグを定義することから始めます。これは、クラス:tuto:examplesを宣言することによって行われます。私たちのカスタムタグには、例と現在の2つの属性が必要ですが、子供を持つことは許可されていません(子供は空です;)。 ベースを拡張しているので、x:要素、render()メソッドをオーバーライドして、カスタムマークアップをXHPとして返す必要があります。
- Facebookは、XHP言語をUIライブラリの基礎として使用しており、最終的にはオープンソースになります。 非同期コード実行
その他の機能
<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>
言及する価値があるいくつかのことは、FastCGIと統合デバッガーの最近のサポートです。
Facebookは、自動完了、構文の強調表示、共同編集などを特徴とするWebベースのIDEである「FBIDE」も紹介しています。後で利用できると予想されます。
外部ressources
この記事を準備するために使用した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とどのように異なりますか?
HHVMは、その実行において従来のPHPとは異なります。 PHPは実行時にコードを解釈しますが、HHVMはPHPまたはハックコードを高レベルのバイトコードにコンパイルし、その後マシンコードに変換されます。このプロセスにより、パフォーマンスと効率が向上することができます。
ハッキングプログラミング言語は何ですか?
ハックは、Facebookが発明したHIPHOP仮想マシン(HHVM)のプログラミング言語です。これはPHPの方言であり、静的タイピング、タイプアノテーション、ジェネリックなどの新機能が含まれています。これらは従来のPHPでは利用できません。 PHPを改善するいくつかの機能。潜在的なランタイムエラーを防ぐことができる静的タイピングが含まれています。また、非同期プログラミングをサポートし、I/O操作のより効率的な取り扱いを可能にします。さらに、ハックには、高性能で強力なデータ構造であるコレクションが含まれています。 JITコンピレーションプロセスの性質により、いくつかの違いがあります。ただし、HHVMは「HHVM-Autoload」と呼ばれるツールを提供します。これは、既存のPHPコードをHHVMに移行するのに役立ちます。
HHVMはパフォーマンスをどのように改善しますか? -time(jit)コンピレーションアプローチ。これは、実行時にPHPコードを解釈する代わりに、HHVMがコードを高レベルのバイトコードにコンパイルし、その後マシンコードに変換されることを意味します。このプロセスにより、実行と効率の向上が可能になります。
HHVMなしでハッキングを使用できますか?
いいえ、ハックはHIPHOP仮想マシン(HHVM)専用に設計されたプログラミング言語です。したがって、ハックを使用するには、hHVMをインストールする必要があります。
ハックは静的に型付けの言語ですか?これは、変数のタイプがコンパイル時にチェックされ、潜在的なランタイムエラーを防ぐのに役立つことを意味します。 、静的タイピング、非同期プログラミング、コレクションを含む。これらの機能は、コードの安全性、効率、パフォーマンスを改善するのに役立ちます。
HHVMとハックの使用を開始するにはどうすればよいですか?
HHVMとハックの使用を開始するには、システムにHHVMをインストールする必要があります。インストールしたら、HHVMランタイムを使用してコードをハッキングして実行できます。また、いくつかのリソースとチュートリアルもオンラインで入手できます。
以上がHHVMのPHP交換であるハックを見てくださいの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











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

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

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