【问题标题】:Accessing variables through classes通过类访问变量
【发布时间】:2011-07-14 12:43:47
【问题描述】:

假设我有一个核心程序类,它实例化了一个Page 对象。

这个Page 对象有一个属性$id(这是我们当前所在页面的页面ID)。

Page 类中,它在数据库中查找并通过实例化Template 对象为页面设置模板。

在这个Template 对象中,我想放入一个内容块。这是由 Content 类处理的,我在 Template 类中进行了验证。

现在,为了使该内容正常工作,我需要能够从程序核心拥有的 Page 对象中获取 $id。有没有办法做到这一点?传递页面 id 似乎相当繁琐,尤其是当它到达它时,类之间可能有 10 层?

如果我将 $id 变量设为静态 (static $id;),那么我可以使用 Page::$id 再次获取它,而不必访问我设置它的对象的实际实例吗?

谢谢

汤姆

【问题讨论】:

    标签: php oop class variables


    【解决方案1】:

    您所追求的通常由“dependency injection”处理。在模板构造函数中,在创建 Template 对象时传入像 Page 对象这样的对象是很常见的。 Page 对象本身可能是 Template 的一个属性,或者只是它的 $id 属性。所以不需要在每次函数调用时都传入 id。

    Template::__construct($Page)

    如果 Template 类与 Page 类相关,它还可以扩展 Page 类,如果 Page::$id 属性是 protectedpublic,它就已经可以访问了。

    【讨论】:

    • 最好的 PHP DI 库是 Symfony 的 components.symfony-project.org/dependency-injection
    • 啊,你看模板是页面的一部分,所以它在这方面并不真正相关。那么,它只是通过构造函数传递 $page 对象直到我需要使用它的情况?假设(目前)如果在核心中创建一些对象会发生什么,比如说一个处理会话和权限的 User 对象以及上面提到的 Page 对象。然后,要使用您所说的部分用户对象,我必须将我的 $user 对象传递给我的 Page 类,然后将我的 $user 对象和我的 $page 对象传递给我创建的每个其他类,直到我想在某处使用它下线了?
    • 极其复杂的程序会发生什么?您可能有 10、20、100、1000 个不同的对象,它们都需要共享属性和方法,但彼此独立?跟踪所有依赖注入不是会变得相当复杂吗?
    • 一般来说,如果在另一个类中一次又一次地需要一个对象,我会在构造函数中传递它,这样它总是可用的。但是,如果只有一两个方法需要它,我只会将它作为参数传递给那些方法。如果您希望拥有 100 或 1000 多个此类依赖项,那么您需要进行非常仔细的架构规划,并在必要时扩展类。你不想像thedailywtf.com/Articles/…那样结束
    • 但是对于一个项目中的许多或大多数类需要访问一两个的情况并不少见。如果其中很多都需要 Page 和 User 类,我只需将它们都传递给所有需要它们的类的构造函数。你不必担心链式传递它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多