Forum Webscript.Ru
Программирование => PHP => Тема начата: Алексей от 20 Декабря 2004, 18:31:57
-
Правило для PHP 4: Если класс не имеет конструктора, вызывается конструктор базового класса.
У меня есть главный класс DB:
DB{
function DB(){
//инициализация, соеденение с бд, выбор БД
}
}
и есть:
class pages extends DB{
//....
}
без конструктора.
Работаю:
$myDB = new DB;
//....
$pgs = new pages();
Исходя из вышепредставленного правила, получается, что у меня класс DB 2 раза инициализируется! Недавно эту ошибку обнаружил, хотя никаких реальных ошибок до этого нет и не было...
Очевидно, я не совсем до конца понял суть extends..
Правильно ли я понимаю, что теперь, когда мне нужно использовать в сценарии класс БД и класс отстраничиватель pages, то достаточно вызвать один раз pages и работать только с ним, т.к. он наследует от главного класса все функции и переменные этого класса и pages не имея конструктора сам инициализирует класс DB? Или же существует како-нибудь другое решение?
Просто у меня в классе pages используются методы из класса БД, в частности - запросы к базе.
-
У тебя все методы DB и конструктор тоже наследуются в pages. Поэтому DB отдельно надо инициализировать, только если ты с переменной $myDB собираешься работать отдельно. А так - для работы с $pgs - тебе оно не надо.
-
Алексей:
что у меня класс DB 2 раза инициализируется!
нет, каждый объект у тебя инициализируется по разу, но код конструктора DB() у тебя выполняется 2 раза
-
ааа, понял!
-
отсутствие конструктора у класса - нарушение парадигмы в принципе...
-
Такой вопрос
из описания PHP документации
class A
{
function A()
{
echo "I am the constructor of A.
\\n";
}
function B()
{
echo "I am a regular function named B in class A.
\\n";
echo "I am not a constructor in A.
\\n";
}
}
class B extends A
{
function C()
{
echo "I am a regular
\\n";
}
}
// Это вызов B() как конструктора.
$b = new B;
В PHP 3 функция B() в классе A станет конструктором в классе B, хотя это никак не предполагается. Правило PHP 3: \'Конструктор это функция с тем же именем, что и класс\'. PHP 3 не заботиться о том, определяется ли функция в классе B или наследуется.
Это изменено в PHP 4 путём модификации правила: \'Конструктор это функция с тем же именем, что и класс, в котором она определяется\'. Таким образом, в PHP 4 класс B может не иметь собственной функции-конструктора, и будет вызван конструктор базового класса, печатая \'I am the constructor of A.
\'.
Проверяю на своем PHP версии 4.3.10 получаю
I am B::example() and provide additional functionality.
I am A::example() and provide basic functionality.
Так кто чего наследует? В документации одно - в реальности другое...