在整个代码库中提供类

时间:2014-04-18 14:11:06

标签: php dependency-management

我很陌生'现代' php,因为我的日常工作是花在一个有10年历史的代码库上。我正在尝试自我提升,我正在编写一个演示应用程序,只是为了尝试实现一些现在在php中使用的更新和更好的实践。

我试图通过分离我的课程中的关注点来保持较低的依赖关系。但我认为,当我将debug标志设置为on时,有一些全局可用的调试类会输出消息等会很好。例如

class Blah {
    function getBlah($config) {
        Debugger::message('start call to getBlah()');
        if(empty($config['some_arg'])) {
            Debugger::error('$config[some_arg] not passed to getBlah()');
            return false;
        }
        Debugger::message('end call to getBlah()');
    }
}

(这显然是一个非常人为的例子,但我试图展示我正在谈论的Debugger课程。)

除了Debugger成为这个Blah课程的依赖关系的问题之外,感觉就像“老人”一样。我习惯的PHP。 我知道我可以将Debugger类传递给Blah类而不是假设它,但我需要对所有新类进行此操作。

这一切都只是感觉不对,我假设有更好的方法来处理这样的事情,我还不知道。任何建议。

PS我知道所有比我更好的新框架和组件,以及我应该如何使用它们。我理解并同意,我只是试图从头开始构建一些东西作为学习活动。

2 个答案:

答案 0 :(得分:0)

使用您实例化的DI容器,并为您寻找范围。然后你引导它。它是确保DI的常用方法,您不需要重复自己。它不是一个框架,它是一个可以下载的小组件。我建议使用Laravel的Illuminate容器以方便使用

答案 1 :(得分:0)

刚才有一个想法:特质怎么样?我可以创建Debugger作为特征而不是类。然后我想要使用调试器的任何类,我只需要添加一个use Debugger;语句。

我认为在这种情况下,这似乎不如完整规模的DI复杂且开销小。