Язык программирования PHP | страница 55
> $this->last_name . "");
> }
>}
>class Programmer extends Person{
> // определяем класс
> // Programmer, расширяющий Person
> var $langs = array ("Lisp");
> // константным массивом
> // задать переменную в var можно
> function set_lang($new_lang){
> // метод добавляет еще
> // один язык к списку известных
> $this->langs[] = $new_lang;
> }
>}
>?>
Класс Programmer имеет те же переменные и функции, что и класс Person, плюс переменную $langs, в которой содержится список изученных программистом языков, и функцию set_lang для добавления еще одного языка к списку изученных. Создать представителя класса программистов можно обычным способом с помощью конструкции new. После этого можно устанавливать и получать список языков, которые знает программист, и в то же время можно использовать функции, заданные для класса Person, т.е. устанавливать и получать имя и фамилию программиста и отображать сведения о нем в браузере:
>
>$progr = new Programmer;
>$progr -> set_lang("PHP");
> // методы, определенные для
> // класса Programmer
>print_r ($progr->langs);
>// методы, определенные для класса Person
>$progr->make_person("Bill","Gates");
>$progr->show_person();
>?>
Отношения, в которых состоят созданные нами классы Person и Programmer, называют также отношениями родитель–потомок. Класс Person – родитель, а его потомки, такие как класс Programmer, создаются, основываясь на нем, с помощью расширений. Любой класс может стать родительским и соответственно породить потомков.
Порядок определения классов имеет значение. Нельзя сначала определить класс Programmer, расширяющий класс Person, а уже потом сам класс Person. Класс должен быть определен перед тем, как он будет использоваться (расширяться).
Конструкторы
Теперь, после знакомства с механизмом наследования в PHP, мы можем прокомментировать различие между конструкторами PHP4 и PHP3 и более подробно рассказать о конструкторах вообще. Напомним, что в PHP3 конструктор – это функция, имя которой совпадает с именем класса. А в PHP4 – функция, имя которой совпадает с именем класса, в котором она определена.
>
>class Programmer extends Person{
> // определяем класс
> // Programmer, расширяющий Person
> var $langs = array ("Lisp");
> function Programmer(){
> // этот конструктор будет
> // работать и в PHP3, и в PHP4
> $this->make_person("Иван","Петров");
> }
>}
>?>
Здесь функция Programmer() является конструктором, т.е. выполняется сразу после создания любого представителя класса Programmer, задавая ему имя «Иван» и фамилию «Петров». Конструкторы, как и любые другие функции, могут иметь аргументы. В этом случае, создавая представителя класса, нужно указать значения этих параметров. Аргументы конструктора могут иметь и значения по умолчанию. Если все аргументы имеют значения по умолчанию, тогда можно создавать экземпляр класса без параметров.