Модуль CMSMadeSimple, PHP и общий вопрос проектирования
Я не знаю, могу ли я спросить о CMSMadeSimple здесь или нет, но здесь идет. Я видел другие вопросы CMS и фреймворка.
Я изучаю код CMSMS, чтобы я мог узнать о создании своей собственной CMS. I think this is really a php and design question but here:
http://phpxref.com/xref/cmsmadesimple/nav.html?_functions/index.html
under CMSModule which is the class all have to inherit from they have this code:
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
What is that last part saying? Я не понимаю это Especially when lower in the class it has:
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
These look like they almost do nothing or that they keep calling themself forever....with no real db stuff to boot.
I am hoping to understand the design here with all the calls by reference.
Спасибо.
1 ответ
Начнем с того, что класс CMSModule выглядит так, как будто он использует сдерживание, чтобы полу-наследовать от любого типа объекта $gCms
является. Это не похоже на то, что это один и тот же тип объекта, иначе могут возникнуть бесконечные проблемы рекурсии. Похоже, этот код PHP был разработан до v5 и хорошего наследования? Вероятно, есть класс CMS, но вы читаете класс CMSModule, если это имеет больше смысла.
Чтобы разработать, function & GetConfig
просто возвращает ссылку на то, что возвращается ->GetConfig()
вызов на глобальный объект $gCms
, Очевидно, это для реализации одноэлементного шаблона, так что есть одна основная конфигурация, которая используется и всегда возвращается. Ссылка на этот конфиг и базу данных также сохраняется (перезаписывается) в объекте CMSModule. Это не всегда хорошая идея, но имеет смысл в этом случае, так как она обычно используется для приложений такого типа и в целом для php (глобальные объекты БД и т. Д.).