【问题标题】:What is the best way to pass or access other objects in other classes in PHP?在 PHP 中传递或访问其他类中的其他对象的最佳方法是什么?
【发布时间】:2010-01-14 20:12:57
【问题描述】:

我需要一些帮助来规划如何在 PHP 中完成我的课程。我有一个会话类和一个数据库类,我几乎需要在我使用的所有其他类(论坛、邮件、用户、更多类)中访问它们

所以我正在寻找我应该如何访问我的其他类中的会话类,一种选择是使其成为 GLOBAL,另一种是将 $session 和 $database 对象传递给我这样使用的每个类...

$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');

【问题讨论】:

    标签: php class


    【解决方案1】:

    对于这样的场景,我会使用registry pattern。这是一个相当不错的explanation

    注册表模式就像对象的存储。

    一个代码示例正在开发中。

    编辑:

    在您的示例中(new Mail($session, $database)),我认为即使您使用注册表模式,您也应该这样做。这使得每件事情的耦合度降低,并且更容易独立地理解和更改部分。由于我在过去的几年里没有做太多的 PHP,我不知道是否有任何可用的 IOC 框架,但这会帮助你实例化你的类。

    【讨论】:

    • 注册表对象最终不是单例/全局的吗?
    【解决方案2】:

    我认为singleton pattern 非常适合这种情况。

    talkPHP 上有一个不错的简单教程(带有一些示例代码),这似乎是一个合理的实现。

    【讨论】:

      【解决方案3】:

      对于会话和数据库之类的东西,我认为全局变量在这里很好。

      【讨论】:

        【解决方案4】:

        我完全不同意使用全局变量。我会按照建议使用 Registry 模式,或者将 Session 和 DB 都设为 Singleton,尽管这会使单元测试变得更加困难。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-14
          • 1970-01-01
          • 2011-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多