基本上我的类中的静态方法调用一个非静态方法,该方法反过来调用另一个非静态方法.
这会引发致命错误:
Fatal error: Using $this when not in object context in class.php on line …
我无法弄清楚为什么通过$this从另一个非静态类方法调用非静态类方法是不可行的.
是因为它们都是从静态函数调用的,因此没有$this实例?
这是(简化)类:
class Redis_Provision {
public $redis = NULL;
public function redis_query()
{
if(is_null($this->redis)) {
$this->setBackend();
}
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();
解决方法:
发生错误是因为您静态调用了非静态方法(这将升级E_STRICT – 检查错误报告),这不会停止执行,但意味着没有对象上下文($this不能使用).
修复错误的正确方法是在activate()中实例化类,并在对象上调用redis_query()方法,例如
$redis_provision = new Redis_Provision();
if($redis_provision->redis_query()->ping()) { ... }
这意味着redis_query()使用上下文执行,因此正常运行.
此外,activate()方法是静态的,因此您无需在调用代码中创建新对象.您可以直接调用Redis_Provision :: activate().
标签:php,methods,static-methods,class
来源: https://codeday.me/bug/20190629/1325045.html