0

ここで CMSMadeSimple について質問できるかどうかはわかりませんが、ここに行きます。他の CMS とフレームワークに関する質問を見てきました。

自分でCMSを作る方法を学べるように、CMSMSのコードを勉強しています。これは本当にphpとデザインの問題だと思いますが、ここにあります:

http://phpxref.com/xref/cmsmadesimple/nav.html?_functions/index.html

クラスである CMSModule の下には、すべて継承する必要がある次のコードがあります。

class CMSModule
 479  {
 480      /**
 481       * ------------------------------------------------------------------
 482       * Initialization Functions and parameters
 483       * ------------------------------------------------------------------
 484       */
 485      var $cms;
 486      var $curlang;
 487      var $langhash;
 488      var $params;
.....
 509    function CMSModule()
 510      {
 511          global $gCms;
 512          $this->cms =& $gCms;
 513          $this->config =& $gCms->GetConfig();
 514  

その最後の部分は何を言っているのですか?わかりません。特にクラスが低い場合は、次のようになります。

753      /**
 754       * Returns the cms->config object as a reference
 755       */
 756      function & GetConfig()
 757      {
 758          global $gCms;
 759          $config = &$gCms->GetConfig();
 760          return $config;
 761      }
 762  
 763      /**
 764       * Returns the cms->db object as a reference
 765       */
 766      function & GetDb()
 767      {
 768          global $gCms;
 769          $db = &$gCms->GetDb();
 770          return $db;
 771      }
 772  

これらはほとんど何もしないか、永遠に自分自身を呼び出し続けているように見えます....起動する実際のデータベースはありません。

ここで、すべての呼び出しを参照して設計を理解したいと思っています。

ありがとうございました。

4

1 に答える 1

2

CMSModule クラスから始めると、コンテインメントを使用して、オブジェクトのタイプが何であれ、半派生しているように見えます$gCms。それらが同じタイプのオブジェクトであるようには見えないか、実際に無限再帰の問題が発生します。この PHP コードは v5 よりも前に開発されたように見えますが、継承は良好ですか? おそらくCMSクラスがありますが、それがより理にかなっている場合は、CMSModuleクラスを読んでいます。

詳しく説明すると、は、グローバル オブジェクト の呼び出しfunction & GetConfigによって返されたものへの参照を返しているだけです。どうやら、これはシングルトンパターンを実装するためのものであり、使用され、常に返される 1 つの主要な構成が存在します。その構成とデータベースへの参照も、CMSModule オブジェクトに保持 (上書き) されます。これ常に良いアイデアとは限りませんが、このタイプのアプリケーションや一般的な php (グローバル db オブジェクトなど) で一般的に使用されるため、この場合は理にかなっています。->GetConfig()$gCms

于 2010-11-30T21:13:42.257 に答える