php polymorphism - вызывает родительскую функцию в полиморфной дочерней функции. - PullRequest
3 голосов
/ 22 февраля 2011

Вот родительский класс:

    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 ]

5 голосов
/ 22 февраля 2011

Я думаю, вы собираетесь использовать ключевое слово parent:

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

       $sql = "SELECT * FROM invitation WHERE EventID =" . $this->EventID . " AND Lang = " . $lang;
    }
}
0 голосов
/ 22 февраля 2011

Метод не является статическим, поэтому вместо вызова статического метода Event::getLang() вам нужно вызвать метод родителей

parent::getlang($lang);

Обновление: я имел в виду, что с Event::getLang() вы обычно вызываете статический методв классе, который может или не может быть продлен.Где parent::method() всегда вызывает унаследованный метод и сохраняет область действия (класс или статический) вызывающего метода, Classname::method() всегда пытается вызвать статический метод для определенного класса.

0 голосов
/ 22 февраля 2011

Вы должны использовать parent

class Invitation extends Event{

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

Event::getLang($lang); на самом деле пытается статически вызвать getLang. Смотрите эти ссылки:

Оператор разрешения области (::)

Родитель

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...