4
我已經查找了覆蓋此錯誤的其他問題,但無法找到適用於我的問題的案例。
基本上,我的類中的靜態方法調用一個非靜態方法,該方法返回調用另一個非靜態方法。
這引發一個致命錯誤:
Fatal error: Using $this when not in object context in class.php on line ...
我想不通爲什麼它是不行的通過$這從另一個調用非靜態類方法的非靜態類方法。 是因爲它們都是從一個靜態函數調用的,因此沒有$ 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();
「因爲您已經靜態調用了非靜態方法」 - activate()被定義爲靜態? –
你用'self'靜態調用'redis_query()'。 –
確實調用了一個靜態方法,儘管已經使用new實例化對象將在導致錯誤的靜態上下文中執行您的代碼。 – EmmanuelG