Автор Тема: extendes && OOP  (Прочитано 3667 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Алексей

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 176
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
extendes && OOP
« : 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 используются методы из класса БД, в частности  - запросы к базе.

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
extendes && OOP
« Ответ #1 : 20 Декабря 2004, 18:52:38 »
У тебя все методы DB и конструктор тоже наследуются в pages. Поэтому DB отдельно надо инициализировать, только если ты с переменной $myDB собираешься работать отдельно. А так - для работы с $pgs - тебе оно не надо.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
extendes && OOP
« Ответ #2 : 20 Декабря 2004, 22:33:49 »
Цитировать
Алексей:
что у меня класс DB 2 раза инициализируется!

нет, каждый объект у тебя инициализируется по разу, но код конструктора DB() у тебя выполняется 2 раза
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Алексей

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 176
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
extendes && OOP
« Ответ #3 : 21 Декабря 2004, 08:40:10 »
ааа, понял!
« Последнее редактирование: 21 Декабря 2004, 08:47:13 от Алексей »

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
extendes && OOP
« Ответ #4 : 21 Декабря 2004, 09:37:25 »
отсутствие конструктора у класса - нарушение парадигмы в принципе...
AS IS...

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
extendes && OOP
« Ответ #5 : 21 Сентября 2005, 20:07:33 »
Такой вопрос
из описания 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 
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.


Так кто чего наследует? В документации одно - в реальности другое...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28