52568.fb2
Порядок определения классов имеет значение. Нельзя сначала определить класс Programmer, расширяющий класс Person, а уже потом сам класс Person. Класс должен быть определен перед тем, как он будет использоваться (расширяться).
Конструкторы
Теперь, после знакомства с механизмом наследования в PHP, мы можем прокомментировать различие между конструкторами PHP4 и PHP3 и более подробно рассказать о конструкторах вообще. Напомним, что в PHP3 конструктор – это функция, имя которой совпадает с именем класса. А в PHP4 – функция, имя которой совпадает с именем класса, в котором она определена.
<?php
class Programmer extends Person{
// определяем класс
// Programmer, расширяющий Person
var $langs = array ("Lisp");
function Programmer(){
// этот конструктор будет
// работать и в PHP3, и в PHP4
$this->make_person("Иван","Петров");
}
}
?>
Здесь функция 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, т.е. свойства объекта
и их значения */
?>
Приведенные примеры будут работать и в 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{