Когда я создаю класс супертипа и расширяю его, что происходит с конструктором супертипа? - PullRequest
0 голосов
/ 17 ноября 2011

Могу ли я расширить конструктор типа sueprtype? документация ничего не говорит о расширении функций.

Я хочу создать класс, который подключается к базе данных при инициализации подтипов, но я не хочу писать код подключения для каждого подтипа. Поэтому я хотел бы сделать это в конструкторе супертипа, но я также хочу, чтобы у подтипов были конструкторы.

Ответы [ 4 ]

1 голос
/ 17 ноября 2011

Да, вы можете переопределить конструктор, как и любой другой метод в классе:

<?php
class DbSuper {
    function __construct() {
        echo "db connection using super class<br/>";
    }
}

class DbSub extends DbSuper {
    function __construct() {
        echo "db connection using sub class<br/>";
    }
}

class DbSubNoConstr extends DbSuper {

}

class DbSubBothConstr extends DbSuper {
    function __construct() {
        echo "execute subclass code<br/>";
        parent::__construct();
    }

}

new DbSub(); //prints db connection using sub class
new DbSubNoConstr(); // prints db connection using super class
new DbSubBothConstr(); // prints execute subclass code db connection using super class
?>
1 голос
/ 17 ноября 2011

С php.net

Примечание. Родительские конструкторы не вызываются неявно, если дочерний класс определяет конструктор.Для запуска родительского конструктора требуется вызов parent :: __ construct () внутри дочернего конструктора.

http://www.php.net/manual/en/language.oop5.decon.php

Итак, вы подключаетесь кбаза данных в конструкторе суперкласса.Затем создайте конструктор подкласса и вызовите parent::__construct()

Но, вероятно, было бы лучше явно подключиться.В базовом классе вызовите $this->connect(), который будет определен в родительском классе.

1 голос
/ 17 ноября 2011

Так же, как вы можете использовать parent::methodName() для вызова родительской версии функции, так и вы можете вызвать self::methodName(), чтобы вызвать текущую классовую реализацию метода.

Эти ссылки могут помочь вам

http://www.php.net/manual/en/language.oop5.basic.php#102275

1 голос
/ 17 ноября 2011

Методы не расширяются как таковые; классы расширяются. Методы этих классов все еще существуют и могут быть вызваны, если они имеют соответствующую область.

Чтобы более прямо ответить на ваш вопрос, вы можете вызвать parent::__construct(), чтобы вызвать метод __construct() суперкласса. См. документацию PHP по конструкторам и деструкторам для получения дополнительной информации.

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