【问题标题】:PHP Class Property/Method SynchronizationPHP 类属性/方法同步
【发布时间】:2011-12-02 09:30:14
【问题描述】:

已修订 - 我有多个跨文件的类定义(每个文件一个类)。我想做的是这个;我有一个名为Master 的类,我创建了一个实例,然后Master 对象创建了我定义的其余类的实例。 Master 里面定义了我的所有属性。

Master 创建的实例中,我希望能够直接从$this 使用Master 的属性/方法,即$this->methodInMaster,而无需将Master 的对象传递给新实例,存储它,然后调用$this->MasterInstance->methodinMaster。有什么方法可以实现吗?

extends 关键字在这里根本没有帮助; Master 创建实例的类将继承 Master 的属性和方法,但是这些实例对 Master 的属性所做的任何更改都不会“保存”在 Master 对象中,只是创建的对象变化。换句话说,这些更改在任何其他类中都不可见。

我认为这是一个限制,不能使事物静态化,因此没有“实例”,但有没有办法使用 call, setget 魔术方法解决所有这些问题?

【问题讨论】:

  • 您确认确实如此吗?这违背了继承的整个理念。
  • 我不确定你想要实现什么,但从类扩展只是扩展方法和字段而不是对象实例。也许你应该尝试一些设计模式链接代理或工厂?
  • Viruzzo 这是 PHP 的行为,我也不明白。基本上我想做的是我有很多类分布在多个文件中。我已将大部分属性放在一个类中,并且我希望能够通过$this->property 在其他类中访问它们,而无需引用实例。 __get(), __set() and __call 似乎是要走的路(?),但我想不出办法。
  • 我宁愿在我的代码 Jack 中没有任何静态的东西,因为会有多个 every 类的实例

标签: php inheritance object extends


【解决方案1】:

Extends 对您没有帮助,因为它不是您所需要的:如果您想要一个可由多个实例访问的单个对象,您需要一个 Singleton(它必须是静态的,因为另一种方法是采用某种不切实际的形式来共享单个参考)。对于您想要的结构,您将需要一个与 Master 类不同的 Singleton,但它可以被它访问。基本上你的工作流程是:

  • 在单例中实现您的功能
  • 在 Master 的方法中访问单例
  • 照常扩展 Master

这样子类中的每个调用都将透明地“重定向”到对单例的调用。这样做不是很优雅(与直接访问子类中的单例相反),但它应该适用于您的设计。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多