【问题标题】:php - Logging: use the same object in multiple classesphp - 日志记录:在多个类中使用相同的对象
【发布时间】:2013-04-14 15:43:09
【问题描述】:

我已经坐了很多年了,找不到让我满意的方法。

我的问题: 我有一个父类和各种子类。 在父级的构造函数中,创建了一个新对象(除其他外)。这个对象来自我的日志文件类。它存储在受保护的变量中。

在父类中,日志保存不是问题,一切都按计划进行。

如果我想在子类中使用该对象,我无法让它工作。我只是无法访问它。 我在父类中尝试了一个函数来返回对象,这也不起作用。

我在这里不知所措。

这是父级的构造函数:

function __construct() {
...   
 $this->reg_log_file = new log_file(bef_registration::REG_LOG_NAME, bef_registration::REG_LOG_KEEPING);
...
}

为了创建新条目,在父类中,以下内容就足够了:

$this->reg_log_file->entry('start log');

在子类中,这会导致错误:

在非对象上调用成员函数 entry()

在谷歌搜索和阅读几个小时后,我仍然没有想出正确的方法。

有人有想法吗?

【问题讨论】:

  • 在 Child 类中,您不应该使用对 parent 的引用来调用该对象吗? parent::。根据 PHP 手册 Members declared protected can be accessed only within the class itself and by inherited and parent classes,受保护的成员应该在子类中可见
  • 以下是您可能错过的内容:记录器应该是装饰器,而不是依赖项。
  • 我也这么认为,但是我尝试过的每一种方式,我都无法存在变量。当我 print_r 对象时,变量似乎为空,我不知道为什么。 teresko,我不知道你想说什么。我不依赖它,我只是想实现它。

标签: php oop inheritance parent


【解决方案1】:

您应该在每个子构造函数的主体中运行parent::__construct();,并且日志对象将被实例化并在所有继承的子类中可见。

【讨论】:

  • 不是说每次都是新创建的对象吗?
  • 如果你创建子类对象,所有的构造函数(孩子和他所有的父母)将只运行一次。
猜你喜欢
  • 2013-09-11
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2020-11-22
  • 2013-03-21
相关资源
最近更新 更多