我需要一些帮助来规划如何在PHP中完成我的课程。我有一个会话类和一个数据库类,我几乎需要访问我使用的每个其他类(论坛,邮件,用户,更多的类)
所以我正在寻找如何访问其他类中的会话类,1选项是使其成为GLOBAL,另一种是将$ session和$ database对象传递到我使用的每个类中...... / p>
$mail = new Mail($session, $database);
但如果我必须为15个以上的不同课程做这件事,这似乎相当繁琐?有没有更好的办法?
下面是我在其他类中调用的会话类中的一些方法的示例。
// set a value into session
$session->set('auto_id', 'some value for auto_id');
// get a value from session
$session->get('auto_id');
答案 0 :(得分:2)
对于这样的场景,我会使用registry pattern。这是一个非常好的explanation。
注册表模式就像对象的存储一样。
代码示例即将推出。
编辑:
在您的示例中(新邮件($ session,$ database)),我认为即使您使用注册表模式也应该这样做。这使得每件事物都更少耦合,更容易理解和独立更改零件。由于我在过去几年中没有做过太多PHP,我不知道是否有任何可用的IOC框架,但这可以帮助您实例化您的类。
答案 1 :(得分:1)
我认为singleton pattern非常适合这种情况。
在talkPHP处有一个很好的简单教程(包含一些示例代码),这似乎是一个合理的实现。
答案 2 :(得分:0)
对于会话和数据库之类的东西,我认为全局变量在这里很好。
答案 3 :(得分:0)
我完全不同意使用全局变量。我要么按建议使用注册表模式,要么将Session和DB本身作为Singletons,尽管这会使单元测试更加困难。