首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP应用程序可能的循环依赖问题?

PHP应用程序可能的循环依赖问题?
EN

Stack Overflow用户
提问于 2018-09-19 00:09:34
回答 2查看 0关注 0票数 0

我遇到了我认为是PHP应用程序的循环依赖问题。如果这不正确,请告诉我。情况如下:

两个类,LogManager和DBSession。

DBSession用于与数据库交互,LogManager用于记录文件。两者都广泛用于我的应用程序中。创建DBSession实例时,必须通过构造函数参数为其提供LogManager实例。这是因为DBSession有时会将信息记录到文件中,并将使用LogManager实例执行此操作。

现在,我想扩展LogManager,以便它也可以登录到数据库表,而不是文本文件。当然,我的偏好是重用现有的课程,但我很快意识到这带来了一个有趣的情况。

DBSession已经需要一个LogManager实例来构造。如果我想在LogManager中重用DBSession类,它现在需要一个DBSession实例。我怎样才能满足这两个要求?显然,我的方法肯定是错的。

你怎么建议我解决这个问题?

先谢谢你,伙计们。

EN

回答 2

Stack Overflow用户

发布于 2018-09-19 08:50:41

不要扩展LogManager,让它成为聚合类型。并延迟选择要记录的位置,即:

代码语言:javascript
复制
$logManager = new LogManager();
$dbSession = new DbSession($logManager);
$logManager->add(new FileLog($filename) );
$logManager->add(new DBLog($dbSession) );

FileLog和DBLog当然共享一个通用接口。这是Observer模式的应用程序,其中add()是“subscribe”操作,FileLog / DBLog是日志记录事件的观察者。(这样你也可以在很多地方保存日志。)

欧文编辑:调整为php语法。

票数 0
EN

Stack Overflow用户

发布于 2018-09-19 09:52:52

也许你可以应用一些模式,比如Singleton模式,以确保你只有一个LogManager类的实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档