私が初めて PHP を学び始めたとき、多くの面接官がよく PHP とは何なのかと尋ねたのを覚えています。当時の標準的な答えは、PHP は弱く型付けされた動的スクリプト プログラミング言語であり、オープンな言語であるというものでした。ソース. 、
free、ハイパーテキスト プリプロセッサの略です。
これは非常に表面的な説明ですが、私にとって PHP はツールであり、両手にハンマーですが、このハンマーは両側に釘抜きが付いているハンマーとよく揶揄されます。
マルチプロセス モデル
PHP はマルチプロセス モデルで設計されており、リクエストが互いに干渉せず、1 つのリクエストが失敗することがないという利点があります。他のプロセスに影響を与えることはありませんが、当初は個人の Web サイトのみに使用されていたツールセットとしてこの設計に問題はありませんが、PHP アプリケーションが大きくなり、アクセス数が増加するにつれて、この方法は、起動のオーバーヘッドを考慮すると明らかに不適切です。大量のリクエストを処理するのはコスト効率が悪いため、現在、PHP は基本的に PHP-FPM の管理下で実行されています。これは PHP プロセス マネージャーです。メモリに常駐し、スタンバイでいくつかの PHP プロセスを開始します。リクエストが受信されると、それを処理するプロセスが割り当てられます。処理後、PHP プロセスはプロセスを破棄せずにリサイクルします。これにより、PHP は高トラフィックのアクセス要求に対処できます。
もちろん、現在では、PHP が WEB リクエストをより効率的に処理できるようにする PHP マルチスレッド ソリューションとコルーチン ベースのソリューションがあります。
弱い型
JAVA や C/C とは異なり、PHP は型付き言語であるため、変数の宣言時に型を決定する必要はありません。 . 、型も実行時に明示的または暗黙的に変更されます。これが、PHP の開発とアプリケーションが高速で便利である理由の 1 つです。
その他
Zend エンジン Ext 拡張モードは内部結合を軽減し、PHP 自体への関数の追加や削除を簡単に行うことができます。
文法がシンプルで必須の仕様が少なく、手続き型でもオブジェクト指向でも開発できるプログラミングスタイルですが、もちろん関数型スタイルも使用できます。
現在の主流バージョンである PHP、PHP7、および PHP5 のアーキテクチャは上図のとおりで、主に 4 つのシステム層で構成されており、下から上に、Zend エンジン、拡張機能、拡張機能、 SAPI インターフェースと上位層アプリケーション。
Zend Engine
Zend エンジンは PHP4 であり、後で PHP に追加されます。元の PHP インタープリターを書き直したもので、完全に C 言語を使用して開発されています。つまり、PHP は C で書かれたプログラミング言語ソフトウェアとして理解できます。エンジンの機能は、PHP コードを、JAVA の ByteCode (バイトコード) に似たオペコードと呼ばれる中間言語に変換することです。
エンジンは、PHP コードに対して 4 つのステップを実行します。
字句解析 スキャン (字句解析)、PHP コードを言語フラグメント (トークン) に変換します。トークンを解析し、単純で意味のある式に変換します。コンパイル コンパイルでは、式をオペコードにコンパイルします。 Executionを実行し、Opcodeを1つずつ順番に実行することで、PHPコードで表現された機能を実現します。
APC、Opchche これらの拡張機能は、オペコードをキャッシュして PHP アプリケーションの実行速度を向上させることができ、これらを使用すると、リクエストが再び来たときに最初の 3 つの手順を省略できます。
このエンジンは、基本的なデータ構造、メモリの割り当てと管理も実装し、外部呼び出しに対応する API メソッドを提供します。
拡張機能 拡張機能
共通の組み込み関数と標準ライブラリは拡張機能を通じて実装されます。これらは PHP のコア拡張機能と呼ばれます。ユーザーは独自の拡張機能に従ってこれらをインストールすることもできます要件。PHP 拡張子。
SAPI
SAPI は Server Application Programming Interface の略語です。中国語はサーバー アプリケーション プログラミング インターフェイスです。これにより、PHP は一連のフックを通じて周辺機器とデータを交換できます。 SAPI は、PHP と外部環境の間のエージェントです。SAPI は、外部環境を抽象化し、内部 PHP に固定かつ統一されたインターフェイスを提供します。これにより、PHP 自体の実装は、複雑な外部環境の影響を受けることなく、ある程度の機能を維持できます。独立。
SAPI の分離により、PHP は異なるアプリケーションとの互換性を考慮する必要がなくなり、アプリケーション自体も独自の特性に基づいて異なる処理方法を実装できるようになります。
上位層アプリケーション
Web アプリケーションであっても、Cli モードで実行されるアプリケーションであっても、プログラマによって作成された PHP プログラムは上位層アプリケーションです。 PHP プログラマーはそれを書くことです。
概要
Android 開発を勉強したことがあれば、これらのことは明らかに理解しやすいでしょう。Android のアーキテクチャは PHP のアーキテクチャに非常に似ているからです。これを理解すると、PHP の創始者が「PHP 開発には実際にはフレームワークは必要ない」と言ったのも理解できるでしょう、なぜなら PHP の設計自体がフレームワークに似たものだからです。 Zend はエンジン、Ext はホイール、ハンドル、その他の自動車コンポーネント、SAPI は道路です。
多くの人は自分が単なるドライバーであると偏執的であるため、このコンテンツが少し役に立たないと感じる人もいるかもしれません。なぜドライバーは車がどのように動くかを理解する必要があるのでしょうか? 車の作り方を理解することの方が重要です。軽蔑的だ。私も Laravel ドキュメントを翻訳していたときまではそう思っていました。Laravel の作者が私にインスピレーションを与えてくれたので、この記事を読んでいるあなたにも次の言葉を送ります。
「現実世界」でツールを使用する場合、そのツールがどのように機能するかを理解していれば、より快適にツールを使用できるようになります。アプリケーション開発も同様です。開発ツールがどのように機能するかを理解すると、より快適に使用できるようになります。
このドキュメントの目的は、Laravel フレームワークの仕組みとその仕組みをより深く理解していただくことです。フレームワークを包括的に理解すると、すべてが「魔法」ではなくなり、より自信を持ってアプリケーションを構築できるようになります。
以上がPHP とは - PHP のアーキテクチャと原理の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。