php polymorphism - 在多态子函数中调用父函数

时间:2011-02-22 11:52:39

标签: php object polymorphism

这是父类:

    class Event {

    public function getLang($lang){
     $sql = "select * from Event where EventID =" . $this->EventID . "AND Lang =" . $lang;
    $result = $this->selectOneRow($sql);
    }
}

这是孩子:

class Invitation extends Event{

public function getLang($lang){
Event::getLang($lang);

$sql = "select * from invitation where EventID =" . $this->EventID . " and Lang = " . $lang;

    }
}

我有一些希望EVENT :: getLang($ lang)可以工作,但在我回显查询后,我可以看到它没有一个EventID。

有没有正确的方法呢?

我尝试直接复制/粘贴子代码中的代码,但这也无法工作,因为我在父级的级别上得到了事件选择结果的变量。

有没有办法解决这个问题,还是我处于僵局?

3 个答案:

答案 0 :(得分:5)

我认为您希望使用parent关键字:

class Invitation extends Event{
    public function getLang($lang){
       parent::getLang($lang);

       $sql = "SELECT * FROM invitation WHERE EventID =" . $this->EventID . " AND Lang = " . $lang;
    }
}

答案 1 :(得分:0)

您必须使用parent

class Invitation extends Event{

    public function getLang($lang){
        parent::getLang($lang);
        ....
    }
}

Event::getLang($lang);实际上试图静态调用getLang。请参阅以下链接:

Scope Resolution Operator (::)

Parent

答案 2 :(得分:0)

该方法不是静态的,所以不需要调用静态方法Event::getLang(),而是需要调用parent方法

parent::getlang($lang);

更新: 我的意思是,Event::getLang()通常会在类上调用静态方法,可能会扩展也可能不扩展。其中parent::method()总是调用继承的方法并保持调用方法的范围(类或静态),Classname::method()总是尝试在特定类上调用静态方法。