【发布时间】:2009-09-30 15:15:05
【问题描述】:
在 PHP5.3 中有没有办法让一个对象 $enclose 知道它在哪个对象 $enclosure 中?本质上,我想让 $enclosure 的一些变量只能由 $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
//????
}
}
背景:
我正在开发一个可以显示多个日程表的日历,这些日程表有多个可能重复发生的事件。我正在使用 PHP 的 DateTime、DateInterval 和 DatePeriod 对象进行日期处理(尽管它们有其他缺点,但它们使处理时区和重复更容易)。目前我的设计是这样的:
Calendar 对象有一个名为 $window 的 DatePeriod,其中包含所有显示日期。例如1957 年 5 月。
Calendar 也有一个由 Schedule 对象组成的数组 $schedules。 $schedules 的每个成员都必须知道 $window。所以我在 Calendar 和 Schedule 之间实现了观察者模式。
类似地,每个 Schedule 都有一个事件数组 $events,因为它们可能是重复的,所以也必须知道 $window。所以我在 Schedule 和 Event 之间实现了观察者模式。
所有这一切意味着我每次更改 $window 时都会将其复制到多个其他对象。
如果$events 中的Events 知道它们的封闭Schedule 是谁并且Schedule 知道它封闭的Calendar 是谁,那么效率会高得多。然后,当这些对象需要使用 $window 时,他们可以请求它。
对实现这一目标的好方法有什么想法吗?有什么模式可以参考吗?
【问题讨论】:
标签: php design-patterns oop