【发布时间】:2017-09-15 10:37:44
【问题描述】:
我有一个名为 BaseContext 的类,还有一个名为 JsonReporter。 BaseContext 需要一个 JsonReporter 对象,并且必须在各个点调用它的方法。问题是 BaseContext 的方法是并且必须保持静态,但无论如何都需要使用 JsonReporter 对象。
这就是我所做的:
class BaseContext extends RootContext
{
static $reporter;
public function __construct() {
self::$reporter = new JsonReporter();
}
public static function startSuite() {
self::$reporter->startSuite();
}
}
然后在 JsonReporter 中:
class JsonReporter
{
private $message;
public function startSuite() {
$this->message.="{ \"feature\" : [";
}
}
好的,现在每次在 BaseContext startSuite() 被调用,我得到:
致命错误:在 null 上调用成员函数 startSuite()
我以前从未使用过 self::,而且我可能没有正确使用它。我正在尝试做的事情是否可行?我怎样才能让它发挥作用?
【问题讨论】:
-
如何创建
BaseContext对象? -
你正在使用
startSuite()静态的问题,所以你永远不会构造对象。 -
self指的是类本身,它只能访问静态方法和属性,而$this指的是new类的实例化(称为对象)。对象可以访问静态方法和属性,但静态方法不能访问对象方法。 -
嗯嗯。那太糟糕了。得用别的办法。谢谢
-
避免使用任何静态的东西,除非类要求属性或方法独立于从它创建的任何对象。或者如果每个对象必须共享相同的属性。
标签: php class object static fatal-error