Опубликован: 01.03.2005 | Уровень: для всех | Доступ: свободно
Лекция 6:

Объекты и классы в PHP

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >

Конструкторы

Теперь, после знакомства с механизмом наследования в PHP, мы можем прокомментировать различие между конструкторами PHP4 и PHP3 и более подробно рассказать о конструкторах вообще. Напомним, что в PHP3 конструктор – это функция, имя которой совпадает с именем класса. А в PHP4 – функция, имя которой совпадает с именем класса, в котором она определена.

<?php
class Programmer extends Person{ 
    // определяем класс
    // Programmer, расширяющий Person
  var $langs = array ("Lisp");
  function Programmer(){ 
    // этот конструктор будет
    // работать и в PHP3, и в PHP4
    $this->make_person("Иван","Петров");
  }
}
?>
Пример 6.4. Использование конструктора

Здесь функция Programmer() является конструктором, т.е. выполняется сразу после создания любого представителя класса Programmer, задавая ему имя "Иван" и фамилию "Петров". Конструкторы, как и любые другие функции, могут иметь аргументы. В этом случае, создавая представителя класса, нужно указать значения этих параметров. Аргументы конструктора могут иметь и значения по умолчанию. Если все аргументы имеют значения по умолчанию, тогда можно создавать экземпляр класса без параметров.

<?php
class Programmer extends Person{ 
    // определяем класс
    // Programmer, расширяющий Person
  var $langs = array ("Lisp");
  function Programmer($n = "Иван", 
                      $f = "Петров"){
    // это конструктор
    $this->make_person($n,$f);
  }
}
$default_progr = new Programmer(); 
    // создаст программиста Ивана Петрова
$new_progr = new Programmer("Вася",
                            "Сидоров");
    // создаст программиста Васю Сидорова
print_r($new_progr); 
/* выведет информацию о переменной 
$new_progr, т.е. свойства объекта 
и их значения */
?>
Пример 6.5. Использование конструктора

Приведенные примеры будут работать и в PHP3, и в PHP4, конечно если дописать в них определение базового класса Person. Допустим, ситуация немного другая: конструктор имеется только у базового класса Person:

<?php
class Person { // определяем класс Личности
  var $first_name;
  var $last_name;
  function Person($t,$a){ // конструктор
    $this->first_name = $t;
    $this->last_name = $a;
  }
        /* ...        */
}
class Programmer extends Person{ 
    // определяем класс
    // Programmer, расширяющий Person
  var $langs = array ("Lisp");
  function set_lang($new_lang){
    $this->langs[] = $new_lang;
  }
}
$new_progr = new Programmer("Вася",
                            "Сидоров");
?>

Что произойдет в этом случае при создании объекта класса Programmer, будет ли автоматически вызвана какая-либо функция? В PHP3 ничего не произойдет, поскольку в этом классе нет функции с именем Programmer() (здесь конструктор – это функция, имя которой совпадает с именем класса ). В PHP4 будет вызван конструктор базового класса, если он существует, т.е. вызовется функция Person() из класса Person (здесь конструктор – функция, имя которой совпадает с именем класса, в котором она определена).

Еще одна ситуация – в базовом классе есть функция, имя которой совпадает с именем расширяющего класса, а в расширяющем классе нет конструктора.

<?php
class Person { // определяем класс Личности
  var $first_name;
  var $last_name;
  function Person($t,$a){ // конструктор
    $this->first_name = $t;
    $this->last_name = $a;
  }
  function Programmer($new_lang){
    echo "Я – программист";
  }
}
class Programmer extends Person{ 
    // определяем класс
    // Programmer, расширяющий Person
  var $langs = array ("Lisp");
  function set_lang($new_lang){
    $this->langs[] = $new_lang;
  }
}
$new_progr = new Programmer("Вася",
                            "Сидоров");
?>

В этом случае PHP3 вызовет в качестве конструктора функцию Programmer() из описания класса Person. Поскольку конструктор – это функция, у которой то же имя, что и у класса. И неважно, определена ли эта функция в самом классе или она наследуется из базового класса. В PHP4 класс Programmer не будет иметь своего конструктора, поэтому вызовется конструктор базового класса.

Ни в PHP 3, ни в PHP 4 конструктор базового класса не вызывается автоматически из конструктора порожденного класса.

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

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

Сергей Крупко
Сергей Крупко

Добрый день.

Я сейчас прохожу курс  повышения квалификации  - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?