为什么人们在他们的PHP框架中使用单例
好吧,我很难理解为什么需要单身人士.
让我们举一个真实的例子:我有一个CMS的框架 例: class Logger{ private $logs = array(); public function add($log) { $this->logs[]=$log; } } 当然,这个帮助对象对于CMS的页面请求的输入生命期必须是唯一的. 但是为什么在地狱这样一个类不是完全静态的?这可以解决单例模式的需要(这被认为是坏的)例子: class Logger { private static $logs = array(); public static function add($log) { self::$logs[]=$log; } } 通过使这个助手完全静态,当我们需要在我们的应用程序中添加一个日志时,我们只需要静态调用它:Logger :: add(‘log 1’); vs一个单例调用,如:Logger :: getInstance() – > add(‘log 1’); 希望有人让我很容易理解为什么在PHP中使用singleton超过静态类. 编辑 This is a pretty对单身人士的静态讲座,感兴趣的是感谢@James. (请注意,这不解决我的问题)
很多原因.
静态方法基本上是可以从任何范围调用的全局函数,这本身就很难跟踪错误.你也可以根本不使用一个类. 因为你不能有__construct方法,你可能必须在一个地方放置一个init静态方法.现在,他们的代码中的人们不确定init方法是否已被调用.他们再次打电话吗?他们是否必须在代码库中搜索此通话?如果init位于某处,然后被删除或中断,该怎么办?您代码中的许多地方现在依赖于调用init方法的地方. 使用许多单元测试框架,静态方法难以进行单元测试. 还有更多的原因,但很难列出所有这些. 如果您使用DI,单身人士也不是真的需要的. 一个附注. DI允许你的类不依赖于对方,而是依赖于接口.由于他们的关系没有巩固,所以更容易在以后改变你的申请,而一个班级的打破不会打破这两个阶级. 有些情况下,单个状态类是可行的,例如,如果您的方法都不依赖于其他方法(基本上没有任何方法更改类的状态). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |