在PHP5.3中,有没有办法让对象$enclosed知道它在哪个对象$enclosing中?本质上,我希望使$enclosing的一些变量只对$enclosed可访问,而不专门传递这些变量。
class Enclosing {
private $enclosed;//Enclosed object
private $othervar;
function __construct($a,$b){
$this->othervar=$a;
$this->enclosed= new Enclosed($b);
}
}
class Enclosed {
private $myvar;
function __construct($a){
$this->myvar=$a;
}
function where_am_i() {//get reference to Enclosing object
//????
}
}背景:
我正在开发一个日历,它可以显示多个日程表,其中有多个,可能会重复发生的事件。我使用DateTime、DateInterval和DatePeriod对象进行日期处理(尽管它们有其他缺点,但它们使处理时区和递归变得更容易)。目前我的设计是这样的:
Calendar对象有一个名为$window的DatePeriod,其中包含所有显示日期。例如,1957年5月。
日历还具有Schedule对象的数组$schedules。$schedules的每个成员都必须知道$window。所以我实现了Calendar和Schedule之间的观察者模式。
类似地,每个调度都有一个事件数组$events,因为它们可能会重复出现,所以还必须知道$window。所以我实现了调度和事件之间的观察者模式。
所有这些都意味着,每次$window发生更改时,我都会将它复制到多个其他对象。
如果$events中的事件知道其包含的日程表是谁,并且该日程表知道其包含的日历是谁,则效率会高得多。然后,当这些对象需要使用$window时,它们可以直接请求它。
有没有什么好的办法来实现这一点呢?有没有我可以参考的模式?
发布于 2009-09-30 15:20:19
这在理论上是不可能的。这个对象根本没有“封闭”在任何东西中;在Enclosing类的一个实例中,您只需要包含对该对象的引用。可能到处都有对同一个Enclosed实例的引用。
您可以在Enclosing类中声明Enclosed,但我不确定它是否支持内部类。
否则,只需在创建Enclosing对象时传递对Enclosed对象的引用,并将其存储在Enclosed对象的字段中。
https://stackoverflow.com/questions/1498770
复制相似问题