首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对封闭对象的特殊访问?

对封闭对象的特殊访问?
EN

Stack Overflow用户
提问于 2009-09-30 15:15:05
回答 2查看 207关注 0票数 0

在PHP5.3中,有没有办法让对象$enclosed知道它在哪个对象$enclosing中?本质上,我希望使$enclosing的一些变量只对$enclosed可访问,而不专门传递这些变量。

代码语言:javascript
运行
复制
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时,它们可以直接请求它。

有没有什么好的办法来实现这一点呢?有没有我可以参考的模式?

EN

Stack Overflow用户

回答已采纳

发布于 2009-09-30 15:20:19

这在理论上是不可能的。这个对象根本没有“封闭”在任何东西中;在Enclosing类的一个实例中,您只需要包含对该对象的引用。可能到处都有对同一个Enclosed实例的引用。

您可以在Enclosing类中声明Enclosed,但我不确定它是否支持内部类。

否则,只需在创建Enclosing对象时传递对Enclosed对象的引用,并将其存储在Enclosed对象的字段中。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1498770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档