我已经查找了其他有关此错误的问题,但找不到适用于我的问题的案例。
基本上我的类中的静态方法调用一个非静态方法,该方法反过来调用另一个非静态方法。
这会引发致命错误:
致命错误:当不在class.php中的对象上下文中时使用$ this ...
我无法弄清楚为什么通过$ this从另一个非静态类方法调用非静态类方法是不可行的。 是因为它们都是从静态函数调用的,因此没有$ this实例?
这是(简化)类:
class Redis_Provision {
public $redis = NULL;
public function redis_query()
{
if(is_null($this->redis)) {
$this->setBackend(); <------- This throws the fatal error
}
return $this->redis;
}
public function setBackend()
{
$this->redis = new Redis();
$this->redis->connect();
}
public static function activate()
{
if( self::redis_query()->ping())
{
// Do stuff
}
}
}
我将通过以下方式调用:
$redis_provision = new Redis_Provision();
$redis_provision->activate();
答案 0 :(得分:3)
发生错误的原因是您静态调用了非静态方法(这将会增加E_STRICT
- 检查错误报告),这不会停止执行,但意味着没有对象上下文({{ 1}}无法使用。)
修复错误的正确方法是在$this
中实例化类,并在对象上调用activate()
方法,例如
redis_query()
这意味着$redis_provision = new Redis_Provision();
if($redis_provision->redis_query()->ping()) { ... }
使用上下文执行,因此正常运行。
此外,redis_query()
方法是静态的,因此您无需在调用代码中创建新对象。您可以直接致电activate()
。