CI フレームワークを使用すると、システムのコア コードを変更せずに、システムのコア機能 (キャッシュの書き換え、出力など) を追加または変更できます。たとえば、システムでフックが有効になっている場合 (config.php で $config['enable_hooks'] = TRUE;)、特定のフックを追加すると、システムは特定の時間に特定のスクリプトをトリガーできます。
$hook['post_system'] = array( 'class' => 'frameLog', 'function' => 'postLog', 'filename' => 'post_system.php', 'filepath' => 'hooks',);
上記のフック A post_system フックが定義されており、最終ページのレンダリング後のスクリプト処理に使用されます (パラメーターの意味は後ほどまたはマニュアルで参照でき、ここではこれ以上の説明は行いません)。
それでは質問です:
- フックとは何ですか?
- CI でサポートされているフックは何ですか?
- CI ではフックはどのように実装されますか?
段階的に見てみましょう。
1. フックとは何ですか?
Baidu 百科事典でのフックの定義は次のとおりです:
フックは実際にはメッセージを処理するプログラム セグメントであり、システム コールを通じてシステムにフックされます。特定のメッセージが送信されるたびに、フック プログラムは宛先ウィンドウに到達する前にメッセージをキャプチャします。つまり、フック関数が最初に制御を取得します。このとき、フック関数はメッセージを処理(変更)したり、処理せずにメッセージの配信を継続したり、メッセージの配信を強制的に終了したりすることができます。
上記の定義からいくつかの点がわかります:
- フックはイベント駆動型モデルであり、そのコアは当然のことながらイベントです (CI の pre_system や pre_controller などはすべて特定のイベントです)。
- イベント駆動型であるため、次の 2 つの最も重要な手順を含める必要があります: (1) イベントの登録。フックの場合はフックフックの取り付けを指します。 (2). イベントトリガー。特定の時点で特定のフックを呼び出し、対応するフック プログラムを実行します。
- イベント駆動型であるため、統一されたフック ポイントを持つ複数の登録イベントもサポートする必要があります。
- フックを開始した後、プログラムの流れが変化する可能性があり、適切に処理しないとフックが相互に呼び出す可能性があります。同時に、フックを有効にするとプログラムがある程度複雑になり、デバッグが困難になります。
2. CI の事前定義フック
CI は、次の 7 つの利用可能なプリセット フック ポイントを提供します:
pre_system: システム読み込みの初期段階のフックを指します
pre_controller: コントローラーを呼び出します。 、ルーティングとセキュリティのチェックが完了しました
Post_controller_constructor: コントローラーがインスタンス化された後、メソッド呼び出し前
Post_controller: コントローラーが完全に実行された後
Display_override: ディスプレイを書き換えます
キャッシュオーバーライド:キャッシュを書き換えます
Post_system: 最終ページがクライアントに送信された後
3. CI のフックの実装CI のフックのコア機能は、Hook コンポーネントによって完了します。コンポーネント画像:
その内:
enabled: フック機能が有効かどうかを示すフラグ。
hooks: システムで有効になっているフックのリストを保存します
in_progress: このフラグはフック間の相互呼び出しによって引き起こされる無限ループを防ぐために使用されることが後でわかります。
_construct は Hook コンポーネントのコンストラクターで、_initialize が呼び出されて初期化作業が完了します
_call_hook: _run_hook を呼び出して、指定されたフック プログラムを呼び出します。 CodeIgniter.php で、_call_hook が実際に外部呼び出しに提供されるインターフェイスであることを以前に見てきました。
_run_hook: フックプログラムを実際に実行する関数
始める前に、事前定義されたフックの構造を投稿しましょう。この構造はソース コード全体に現れる可能性があるため、この構造のパラメータの意味を知る必要があります。
$hook['xx'] = array( 'class' => 'xx', //钩子调用的类名,可以为空 'function' => 'xx',//钩子调用的函数名 'filename' => 'xx',//该钩子的文件名 'filepath' => 'xx',//钩子的目录 'params' => 'xx'//传递给钩子的参数);
1).フックコンポーネントの初期化
_initialize 関数はフックコンポーネントを初期化するために使用されます: この関数の主なタスクは次のとおりです:(1) 設定ファイルでフック関数が有効になっているかどうかを確認します。ロードする必要があるConfig (構成管理コンポーネント):
1 2 3 4 5 6
| $CFG =&load_class( '構成' 、 'core'); (2) 定義されたフック リストをロードします 同様に、異なるフックを有効にするために異なる ENVIRONMENT を設定することもできます:
{ FALSE を返します。 (2)。同じフック ポイントに対して複数のフックが有効になっているかどうかを確認します。有効な場合は、
_run_hook 関数は、事前定義されたフック配列をパラメータとして受け取り、次のように実装されます:
(1)。単に配列ではない (当然、有効なフックではない) 場合は、直接返します:
in_progress は、現在のフックの実行ステータスをマークするために使用されます。このパラメータの主な機能は、フック間の相互呼び出しによって引き起こされる無限ループを防ぐことです。
1 2
3
|

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

XSS攻撃を防ぎ、リソースのロードを制限し、ウェブサイトのセキュリティを改善できるため、CSPは重要です。 1.CSPはHTTP応答ヘッダーの一部であり、厳格なポリシーを通じて悪意のある行動を制限します。 2。基本的な使用法は、同じ起源からのロードリソースのみを許可することです。 3.高度な使用法は、特定のドメイン名がスクリプトやスタイルをロードできるようにするなど、より微調整された戦略を設定できます。 4。CSPポリシーをデバッグおよび最適化するには、コンテンツセキュリティポリシーレポートのみのヘッダーを使用します。

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

HTTPSは、HTTPに基づいてセキュリティレイヤーを追加するプロトコルであり、主に暗号化されたデータを介してユーザーのプライバシーとデータセキュリティを保護します。その作業原則には、TLSの握手、証明書の確認、暗号化された通信が含まれます。 HTTPSを実装する場合、証明書管理、パフォーマンスへの影響、および混合コンテンツの問題に注意を払う必要があります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

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

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ホットトピック



