我真的对这个问题感到疯狂。 我无法在子类的静态方法中调用父类的方法。
这是我尝试的但它不起作用..
class custom extends service {
private $service;
function __construct() {
parent::__construct();
$this->service = new service;
}
public static function activematches($callback) {
$select_by_user = parent::$db->select('matches', '*', array('user_id' => $user_id,
if (count($select_by_user) == 0 && count($select_by_opponent) == 0)
parent::$check->send('11');
else
$this->service->make($callback['request'], $callback['data']);
}
当我致电$this->service
时,我得到:
Fatal error: Using $this when not in object context
我尝试将其设为静态,我尝试通过调用父方法parent ::方法将相同的方法放在子类中,但没有...
我是OOP的新手,有什么帮助吗?
答案 0 :(得分:3)
对于静态调用中的访问,必须将属性定义为静态
protected static $services;
从那里你需要在你的静态方法中引用。
self::$services
或
static::$services
在此上下文中引用self
将引用定义引用的$ services属性。 static
将从调用引用的类上下文引用该属性。有关详细信息,请参阅手册对late static binding
<强>更新强>
基于custom
在这种情况下延伸service
的事实,我怀疑这是你真正追求的。类定义如:
class custom extends service {
public function activematches($callback, $user_id) {
$select_by_user = $this->db->select('matches', '*', array('user_id' => $user_id));
if (count($select_by_user) == 0 && count($select_by_opponent) == 0)
$this->check->send('11');
else
$this->make($callback['request'], $callback['data']);
}
}
可能更接近你想要的。
答案 1 :(得分:0)
如果父方法make
不是静态的:
您无法从子类的静态方法中调用父类的非静态方法。您是否考虑过将子方法设为非静态?我认为这是你最好的选择。
如果父方法make
是静态的:
parent::make($callback['request'], $callback['data']);
但这被称为Late Static Bindings,它是在PHP 5.3.0中引入的。它在旧版本中不起作用,所以要小心。
答案 2 :(得分:0)
致命错误:不在对象上下文中时使用$ this
这实际上是您的问题的答案。 static members of class的具体内容是 - 您可以在不创建对象的情况下使用它们。 $ this - 对象的引用,其中调用了上下文方法。
因此,尝试以这种方式查看问题 - 在静态成员中,您没有任何$ this。 您只能以这种方式使用父类的静态成员 - self :: method。
或者,您实际上可以在父类上创建一个对象,并在“动态”表示法中使用任何“动态”方法,但这会让你以后更加疯狂,相信我)