Модуль CMSMadeSimple, PHP и общий вопрос проектирования - PullRequest
0 голосов
/ 30 ноября 2010

Я не знаю, могу ли я спросить о CMSMadeSimple здесь или нет, но здесь идет. Я видел другие вопросы о CMS и фреймворке.

Я изучаю код 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  

Похоже, они почти ничего не делают или что они продолжают называть себя вечно ... без реальных дБ для загрузки.

Я надеюсь понять дизайн здесь со всеми вызовами по ссылке.

Спасибо.

1 Ответ

2 голосов
/ 01 декабря 2010

Начнем с того, что класс CMSModule выглядит так, как будто он использует сдерживание для полу-производного от того, какой тип объекта $gCms является.Это НЕ похоже на то, что они относятся к одному и тому же типу объектов, иначе могут возникнуть бесконечные проблемы рекурсии.Похоже, этот код PHP был разработан до v5 и хорошего наследования?Вероятно, есть класс CMS, но вы читаете класс CMSModule, если это имеет больше смысла.

Чтобы уточнить, function & GetConfig просто возвращает ссылку на то, что возвращается вызовом ->GetConfig() вглобальный объект $gCms.Очевидно, это для реализации шаблона singleton , так что есть одна основная конфигурация, которая используется и всегда возвращается.Ссылка на эту конфигурацию и базу данных также сохраняется (перезаписывается) в объекте CMSModule.Это не всегда хорошая идея, но имеет смысл в этом случае, так как оно обычно используется для приложений такого типа и вообще в php (глобальные объекты БД и т. Д.).

...