私は discuz x2 のソースコードを 1 か月間勉強しました。その後、開発経験を積みました。経験を書き留めることは、過去を振り返り、新しいことを学ぶ一種の振り返りとみなすことができます。
まず、各ルート ディレクトリ ページのおおよその読み込み処理シーケンスを理解する必要があります。ここでは、ルート ディレクトリにある標準ファイルは使用しません。直接的な例として、newModule.php という名前の新しいモジュールを作成します。
プロセスは次のとおりです:
1. newModule.php は最初にコア クラス ファイルをロードします。/source/class/clsss_core.php は、シングルトン モードを使用して dz 全体のコア オブジェクトを初期化します。名前は $discuz で、このオブジェクトにはいくつかの重要な機能があります。まず、$_G のパラメータがこのオブジェクトの var 属性を参照します (つまり、$discuz->var = $_G)。次に、$this->var を使用して、オブジェクト内およびオブジェクト外で $_G を操作します。たとえば、独立した関数では、$_G はパラメータの操作に使用されます。次に、このオブジェクトはデータベース オブジェクトやその他のオブジェクトを含む他のすべてのオブジェクトを参照し、オブジェクト内でオブジェクトを操作するときに参照を使用して同期された変更を取得します。 (実際、この設計はもともと非常に混乱していましたが、それは理解できます。以前の設計を大事にするために、このように純粋な OO PHP 設計はタブーです。レジストリまたは組み合わせモードを使用する方が良いです)
2. サポート ファイルをロードします。 /source/function/function_core.php ファイルには、すべてのコア関数が含まれています。コア関数とは、コア クラスをインスタンス化する必要があるときに使用されることを意味します。
3. モジュールのロードに必要な独立関数、/source/function/function_newModule.php ファイルは、モジュール自体に必要な独立関数です。これらの関数は、内部の論理的またはビジネス的な観点から、特定の関数に属すべきではありません。オブジェクトまたはクラス。
4. モジュールのカスタマイズされたクラス ファイル /source/class/class_newModule.php ファイルをロードします。このファイルは、特にドメイン ドライバーまたは OO 愛好家向けに、独自の拡張クラスを作成できます。
5. モジュールのカスタムアクションファイルをロードします。アクションファイルとは何ですか? このファイルの機能は、新しいモジュールに必要な最終エントリ機能を提供することです。
6. 上記のファイルをロードすると、使用できる大きな php が生成されます。必要な機能はすべて用意されており、ajax またはフォームの送信またはテンプレートの表示を待つだけです。
注意すべき点が 1 つあります。実際、これは dz によって設計されたプロセスに従っており、システムのアップグレードによる機能に影響を与えることなく dz にシームレスにサインインできます。落ち着け。専門家は決して満足せず、通常は dz プロセスから離脱します。しかし、破壊力についてはどうでしょうか?それは不明です。ニーズは人によって異なります。
私の提案は、OO といくつかの設計パターンを使用してコードを整理し、ビジネスを合理化することで、スケーラビリティが向上し、再利用率が高くなるということです。もちろん、好きなようにプレイすることもできます。オープンソースです。 (実際、データベースはうまく設計されているようです。私だったら、おそらく設計できないでしょう。専門家の方々、文句を言わないでください。)