【发布时间】:2016-07-15 05:53:21
【问题描述】:
我有一个我只知道类名的对象,比如说“A”。我正在尝试访问该对象的属性。不幸的是,我试图从另一个对象实例访问它们,该对象实例由第一个对象创建,属于 完全 不同的类(也不是扩展的或相关的)。下面简化代码来说明情况。
Class A {
public $var; //some important stuff
function createObjectB() {
$b = new B();
}
}
Class B {
// a totally different class not related with A
}
这是 CMS 中组件的第三方代码,所以我不能弄乱核心代码(或者至少我认为?)试图将属性与 B 创建的对象一起传递而不会在以后导致错误如果此组件得到更新。
我可以从 B 类访问对象,因为稍后在 B 类中调用了一个“布局模板”文件,如果核心代码得到更新,则不会被触及。这样我就不能真正触及这两个类。
使用object B 中的debug_backtrace() 我可以看到我需要的对象的属性向后退了几步,但我认为以这种方式使用该函数来获取我需要的信息是相当hacky,我认为这也是一个相当密集的功能。
我是 PHP 的新手,我想要实现的目标是完全错误的吗?有没有更好的办法?
【问题讨论】:
-
不能在创建B的时候传递A类的引用吗?
$b = new B($this); -
不幸的是,正如我上面所说,它是第三方组件,如果我破解核心文件,我担心如果代码从供应商那里更新,我以后会遇到麻烦。这是正确的想法还是只是小题大做?
-
好吧,那么看来您想要的是使用全局变量。这是一个不好的做法,但比
debug_backtrace更好。当你创建B对象时,或者在A对象的__construct中,你可以写$GLOBALS['_A'] = $this;,然后你可以在B中用$GLOBALS['_A']->var检索它。 -
这两个类都是核心代码的一部分,我可以从稍后在类中调用的“模板”文件中访问 Class B 中的对象。我已经编辑了我的问题,以便更好地指出这一点。