2011-10-21 4 views
0

Родительский класс имеет конструктор, как это:Должен ли я писать конструктор для расширенного класса?

function CD_Log($id = false) { 
    $this->__construct($id); 
} 

function __construct($id = false) { 
    global $cd; 

    if (!empty($id)) { 
     $this->id = $id; 
     $this->populate(); 
    } 
} 

В расширенном классе, я хочу, чтобы сохранить некоторые из вара родителей и вара ребенка в другое место, а также не буду использовать функцию Заселите(). Помимо этого, ребенок строится так же, как и родительский. Должен ли я писать контрибутора для ребенка?

ответ

1

Если вы следуете за ООП, как и сейчас, вы должны удалить глобальный вызов $ cd, установить это как член var родителя или дочернего элемента.

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

Например:

$myCdObject = new MyCdClass(); // Automatically calls constructor 
$myCdObject->Cd_Log($string); 

В примере выше вы убедитесь, что метод CD_Log имеет дело только с log логикой. Если вы не сделаете CD_Log статической функции, то вы можете создать экземпляр класса внутри:

public static function CD_Log($id) 
{ 
    $myCdObject = MyCdClass(); // Automatically calls constructor 

    // Continue with `log` logic 
} 

Чтобы ответить на ваш вопрос, вы, вероятно, хотите конструктор в классе ребенка, который будет вызывать родительский конструктор явно:

class parent 
{ 
    public function __construct($id) 
    { 
     $this->id = $id; 
    } 
} 

class child extends parent 
{ 
    public function __construct($id) 
    { 
     // Going to take advantage of shared logic 
     parent::__construct($id); 

     // Now lets do some child class specific stuff 
    } 
} 
+0

спасибо! кстати, следует ли использовать метод extrends, если ребенку не нужны функции родителя, требуется только родительский var для выполнения других заданий, когда родитель делает свои вещи? – Jenny

+0

Если классы будут делиться любыми атрибутами, будь то членские классы или методы, лучше всего расширить их. –

+0

Спасибо! это достаточно ясно! – Jenny

1

Если вам нужно - вы можете переопределить конструктор в дочернем классе. Но имейте в виду, что в этом случае родительский конструктор не будет вызываться автоматически, и вам нужно сделать это вручную. parent::_construct()

+0

@zerkmas, спасибо! Итак, я напишу конструктор для ребенка. Целью ребенка является использование родительского var для выполнения других заданий при вызове родителя. У него будет свой собственный идентификатор, поэтому я должен указать имя ребенка другому имени, не так ли? – Jenny

+0

@Jenny: Я не могу ответить на ваш вопрос из-за отсутствия информации о том, что вы там делаете. – zerkms

Смежные вопросы