dsa99349 2012-08-30 09:16
浏览 19
已采纳

在PHP中替代全局

Global variables are generally considered bad practice unless absolutely necessary, so I am looking at alternative ways to achieve some functionality.

We are currently working on a CMS system in PHP, and wish to allow other developers to write modules easily for the CMS. We have defined a CMS class as follows:

class CMS
{
    public $version;
    public $sitename;
    public $siteurl;
    public $tbl_prefix;

    function __construct()
    { 

    }

    function RegisterModule()
    {

    }
}

Now, we would like to generate an instance of CMS, and make it accessible to the developer (and all modules and core files) through a variable: $_cms. Since we are not able to use constant variables for objects in PHP, and using a Singleton pattern provides clumsy syntax to access the instance (i.e. CMS::GetInstance()->RegisterModule()), is there any way to achieve what we want without defining a global variable containing an instance of CMS?

Ideally, we are looking for something like the following syntax:

_cms->RegisterModule(); or $_cms->RegisterModule();, with the former being preferred.

  • 写回答

3条回答 默认 最新

  • douchensou6969 2012-08-30 09:20
    关注

    Require plugins to be coded as classes, which either extend the CMS class or accept it as a parameter to their constructor. That's also known as Dependency Injection and is just about the cleanest interface you can get.

    class MyPlugin {
    
        public function __construct(CMS $cms) {
            ...
        }
    
    }
    

    Requiring plugins to be classes also makes it really clean and easy to include them from your app, since they're self-contained and can easily follow specific naming and interface conventions.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大