2010-11-30 36 views
0

我不知道我是否可以在這裏詢問CMSMadeSimple,但不在這裏。我見過其他CMS和框架問題。CMSMadeSimple模塊,PHP和一般設計問題

我正在研究CMSMS的代碼,以便我可以學習製作自己的CMS。我覺得這真是一個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 

這些看起來他們幾乎什麼也不做,他們一直在打自理永遠....沒有真正分貝的東西來引導。

我希望能夠通過引用來理解這裏的設計。

謝謝。

回答

2

從CMSModule類開始,看起來像使用遏制來從對象$gCms所屬的類型進行半派生。它看起來不像是同一類型的對象,或者確實存在無限遞歸問題。它幾乎看起來像這個PHP代碼是在v5之前開發的,具有良好的繼承性?可能有一個CMS類,但是你正在閱讀CMSModule類,如果這樣做更有意義。

詳細說明,function & GetConfig只是返回對全局對象$gCms上的->GetConfig()調用返回的內容的引用。顯然,這是爲了實現一個singleton模式,所以有一個主要配置被使用並且總是返回。對config和db的引用也被保留(覆蓋)到CMSModule對象中。這isn't總是一個好主意,但在這種情況下確實有意義,因爲它通常用於這種類型的應用程序,並且通常用於php(全局數據庫對象等)。