2

我只是在浏览 Codeigniter 的一些核心文件,我发现它使用了一些你可能称之为分散在各处的程序函数,比如在核心类中的某处获取配置类的实例,而不是将其注入到它的对象中只是

$config =& get_config();

我不是专家,但这样做不是很糟糕吗?对我来说,似乎让应用程序具有不必要的全局状态。

据我所见,它几乎与做类似的事情完全相同

$config = App::loadClass('config');

第二种方法比第一种方法更糟吗?我认为这可能是因为当以第二种方式调用它时,App类需要存在(并被定位)并以第一种方式调用它,不需要特定的类并且不需要包含类文件,因此要求较少。

我正在制作自己的框架,并且到目前为止一直避免使用任何静态的东西,但是当我查看领先框架的代码以获得想法或帮助时,我看到到处都是静态的东西,我想知道为什么?

您会认为领先的框架会编码得更好一些,或者使用全局方法可能不像许多人认为的那样有害,您怎么看?

在我的框架中,我必须将这个$config对象注入到许多类和一个$logger对象中,$messages/$language以及一个等等。我使用依赖注入容器和工厂,但与仅仅做相比还是有点痛苦

$config = App::loadClass('config');
$someSetting = $config->setting('some.setting');
Logger::write('debug', 'some message');

如果我要使用静态方法,我应该使用过程方法(Codeigniter 示例)还是嵌入在类中的方法?还是您强烈建议不要使用它们?

任何意见将非常感谢。

4

2 回答 2

2

我不是专家,但这样做不是很糟糕吗?对我来说,似乎让应用程序具有不必要的全局状态。

正确的。应该避免这种情况。它不仅引入了全局状态,而且还发出了strict警告:

严格的标准:只有变量应该通过引用分配......

第二种方法比第一种方法更糟吗?不要认为它更糟,因为至少你没有得到“严格标准”的警告。但是您仍然真的想避免这种情况。> 我正在制作自己的框架,并且到目前为止一直避免使用任何静态的东西,但是当我查看领先框架的代码以获得想法或帮助时,我看到到处都是静态的东西,我想知道为什么?这是因为大多数流行的框架都很糟糕。他们不仅引入了糟糕的编码实践,而且通常还会告诉您它使用的是 MVC 结构(大多数显然不是)。> 你会认为领先的框架会编码得更好一点,或者使用全局方法可能不像很多人认为的那样有害,你怎么看?同样,这些框架充满了 WTF。如果你真的认为你想研究一个流行的框架,你应该研究 Symfony 2 或 Zend FW 2。不是因为它们以正确的方式做所有事情,而是因为它们是最好的(流行的)恕我直言。> 在我的框架中,我必须将这个 $config 对象注入到许多类和一个 $logger 对象和一个 $messages/$language 等等。依赖注入是解决这个问题的正确方法(至少如果您要采用 OOP 方法)。但是,如果你的类有很多依赖项,你可能不得不停下来想一想你的类可能做的太多了。也就是他们有[太多的责任](http://en.wikipedia.org/wiki/Single_responsibility_principle)。> 如果我' 我要使用静态方法我应该使用程序方法(Codeigniter 示例)还是嵌入在类中的方法?还是您强烈建议不要使用它们?强烈建议反对两者。正如您在介绍全局状态中所述。让测试变得痛苦。并且与过程编程比 OOP 有更多的关系。*PS 在我看来,我给了你两个最好的 FW。如果你想知道 CodeIgniter 和 Cake 是最差的。* 为了完成这篇文章,来自 [PHP 聊天室](https://chat.stackoverflow.com/transcript/11?m=6055399#6055399) 的一些相关消息由 [ Lusitanian](https://chat.stackoverflow.com/users/1477526/lusitanian): > *Microframework* (n): 少量废话。另请参阅 *Framework* (n):大量废话。正如您在介绍全局状态中所述。让测试变得痛苦。并且与过程编程比 OOP 有更多的关系。*PS 在我看来,我给了你两个最好的 FW。如果你想知道 CodeIgniter 和 Cake 是最差的。* 为了完成这篇文章,来自 [PHP 聊天室](https://chat.stackoverflow.com/transcript/11?m=6055399#6055399) 的一些相关消息由 [ Lusitanian](https://chat.stackoverflow.com/users/1477526/lusitanian): > *Microframework* (n): 少量废话。另请参阅 *Framework* (n):大量废话。正如您在介绍全局状态中所述。让测试变得痛苦。并且与过程编程比 OOP 有更多的关系。*PS 在我看来,我给了你两个最好的 FW。如果你想知道 CodeIgniter 和 Cake 是最差的。* 为了完成这篇文章,来自 [PHP 聊天室](https://chat.stackoverflow.com/transcript/11?m=6055399#6055399) 的一些相关消息由 [ Lusitanian](https://chat.stackoverflow.com/users/1477526/lusitanian): > *Microframework* (n): 少量废话。另请参阅 *Framework* (n):大量废话。//chat.stackoverflow.com/transcript/11?m=6055399#6055399) by [Lusitanian](https://chat.stackoverflow.com/users/1477526/lusitanian): > *Microframework* (n): 一个小的废话的数量。另请参阅 *Framework* (n):大量废话。//chat.stackoverflow.com/transcript/11?m=6055399#6055399) by [Lusitanian](https://chat.stackoverflow.com/users/1477526/lusitanian): > *Microframework* (n): 一个小的废话的数量。另请参阅 *Framework* (n):大量废话。
于 2013-01-06T16:27:15.497 回答
1

在我看来,CodeIgniter 是一个低质量的 PHP 框架,例如在 Zend Framework 或 Symfony 之下。另外我认为静态函数在 OOP 中有其特定的作用,例如可以在实现注册表模式时使用,用于日志等。关于程序函数,我强烈建议不要在 OOP 应用程序中使用它们。

于 2013-01-06T15:49:36.903 回答