0

我真的被这个问题发疯了。我无法在子类的静态方法中从父类调用方法..

这是我尝试过的,但它不起作用..

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::method 将相同的方法放入子类中,但没有...

我是 OOP 的新手,有什么帮助吗?

4

3 回答 3

3

对于静态调用中的访问,属性也必须定义为静态的

 protected static $services;

从那里你需要在你的静态方法中引用。

 self::$services 

或者

 static::$services 

在此上下文中引用self将引用定义引用的 $services 属性。static将从调用引用的类上下文中引用属性。有关更多信息,请参阅手册对后期静态绑定的说明

更新

基于在这种情况下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']);
    }
}

可能更接近你想要的。

于 2013-07-24T14:50:21.777 回答
0

致命错误:不在对象上下文中使用 $this

这实际上是您问题的答案。类的静态成员的特殊性是 - 您可以在不创建对象的情况下使用它们。$this - 对象的引用,其中调用了上下文方法。

所以试着以这种方式看待问题——在静态成员中你没有任何 $this。您只能以这种方式使用父类的静态成员 - self::method。

或者,您实际上可以在父类上创建一个对象并以“动态”表示法使用任何“动态”方法,但这会让您以后更加疯狂,相信我)

于 2013-07-26T09:51:34.243 回答
0

如果父方法make不是静态的:不能从子类的静态方法调用父类的非静态方法。您是否考虑过使子方法不是静态的?我认为这是你最好的选择。

如果父方法make是静态的:

parent::make($callback['request'], $callback['data']);

但这称为后期静态绑定,它是在 PHP 5.3.0 中引入的。它不适用于旧版本,所以要小心。

于 2013-07-24T15:05:48.647 回答