Язык программирования PHP - [29]

Шрифт
Интервал


>

>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:


>

>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 (здесь конструктор – функция, имя которой совпадает с именем класса, в котором она определена).


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


>

>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 конструктор базового класса не вызывается автоматически из конструктора порожденного класса.


Оператор ::


Иногда внутри описания класса возникает необходимость сослаться на функции или переменные из базового класса. Бывает, что нужно ссылаться на функции в классе, ни один представитель которого еще не создан. Как быть в таком случае? В PHP4 для этого существует специальный оператор «::»


Например, вот так можно вызвать в описании класса Programmer функцию show_name() из базового класса Person и функцию say_hello(), заданную в описании класса Programmer, когда ни один объект этого класса еще не был создан:


>

>class Person { // определяем класс Личности

> var $first_name;

> var $last_name;

> function Person($t,$a){ // конструктор

> $this->first_name = $t;

> $this->last_name = $a;

> }

>function show_name(){

> // метод отображает информацию о личности

> echo ("Меня зовут, " .

> $this->first_name . " " .

> $this->last_name . "!
");

> }

>}

>class Programmer extends Person{

> // определяем класс

> // Programmer, расширяющий Person

> function set_lang($new_lang){

> // метод добавляет еще

> // один язык к списку известных

> $this->langs[] = $new_lang;

> Person::show_name();

> // вызываем функцию из базового класса

> echo "И я знаю теперь еще и " .

> $new_lang;

> }

> function show_name(){

> echo ("Я программист, " .

> $this->first_name . " " .

> $this->last_name . "!
");

> }

> function say_hello(){

> echo "Привет!
";

> }

>}

>Programmer::say_hello();

> // вызываем функцию, когда ни

> // один объект ее класса еще не создан

>$new_progr = new Programmer("Вася","Сидоров");

>$new_progr->set_lang("PHP");

>?>


В результате работы этой программы получим следующее:


>Привет!

>Меня зовут Вася Сидоров!

>И я знаю теперь еще и PHP


С помощью команды Programmer::say_hello(); мы вызываем функцию say_hello класса Programmer как таковую, а не как метод, применяемый к объекту данного класса. В этот момент переменных класса нет. Поэтому функции, вызываемые до создания объекта, не могут пользоваться переменными класса и конструкцией this, но могут пользоваться локальными и глобальными переменными.


В определении класса Programmer мы переопределили функцию show_name(), поэтому вызвать функцию show_name() из базового класса Person можно только с помощью оператора «::» Вообще говоря, внутри определения класса мы можем вызывать любые методы и свойства, заданные в его базовом классе с помощью обычного $this, если только порожденный класс не переопределяет эти свойства и методы, как в нашем примере.


Рекомендуем почитать
Сочинения гр. А. К. Толстого как педагогический материал. Часть 2. Эпические мотивы

«Лирика обладает одним несомненным преимуществом перед другими родами поэзии: она лучше всего освещает нам личный мир поэта, ту сферу, которую выделяет для него в широком Божьем мире его темперамент, обстановка, симпатии, верования; она показывает степень отзывчивости поэта; т.е. его способности переживать разнородные душевные состояния: она часто открывает нам уголки поэтической деятельности, где живут не оформившиеся еще образы, задатки для определенных фигур эпоса и драмы. В эпосе и драме образы становятся разнообразнее и пестрее, но вместе с тем славятся объективнее, особенно в драме…».


Уголовное право. Особенная часть

В книге кратко изложены ответы на основные вопросы темы «Уголовное право. Особенная часть». Издание поможет систематизировать знания, полученные на лекциях и семинарах, подготовиться к сдаче экзамена или зачета.Пособие адресовано студентам высших и средних образовательных учреждений, а также всем интересующимся данной тематикой.


Самоучитель Adobe After Effects 6.0

Обучение созданию профессиональных видеофильмов и обработки их на компьютере представлено в виде 12 уроков. Рассматривается, как с помощью программы Adobe After Effects можно редактировать и рисовать последовательность кадров, добавлять титры и заголовки, применять различные видеоэффекты, редактировать звуковое сопровождение фильма. Описывается процесс настройки прозрачности и наложения слоев видео для последующего экспорта фильма в различных форматах. Показываются способы создания анимации при масштабировании, поворотах и в движении с наложением титров и спецэффектов.


Финансовое право

В учебном пособии в краткой и доступной форме рассмотрены все основные вопросы, предусмотренные государственным образовательным стандартом и учебной программой по дисциплине «Финансовое право».Книга позволит быстро получить основные знания по предмету, а также качественно подготовиться к зачету и экзамену.Рекомендуется студентам, аспирантам и преподавателям по юридическим, экономическим и управленческим специальностям, а также сотрудникам банков.Автор книги, Шевчук Денис Александрович, имеет опыт преподавания различных дисциплин в ведущих ВУЗах Москвы (экономические, юридические, технические, гуманитарные), два высших образования (экономическое и юридическое), более 30 публикаций (статьи и книги), Член Союза Юристов Москвы, Член Союза Журналистов России, Член Союза Журналистов Москвы, Стипендиат Правительства РФ, опыт работы в банках, коммерческих и государственных структурах (в т.ч.


Следственные действия: психология, тактика, технология

Книга посвящена правовым, психологическим и криминалистическим основам следственных действий как процессуальных способов доказывания по уголовным делам. Рассмотрены общая характеристика следственного действия, психологические условия и приёмы повышения их эффективности, даны рекомендации по подготовке и проведению отдельных видов основных следственных действий, регламентируемых ныне действующим УПК РФ.Для работников правоохранительных органов, студентов, аспирантов, докторантов, профессорско-преподавательского состава юридических учебных заведений.


фгос  ответы

Содержащиеся в пособии контрольно-измерительные материалы (КИМы) для 5 класса, аналогичные материалам ЕГЭ, составлены в соответствии с программой общеобразовательных учреждений по русскому языку и учитывают возрастные особенности учащихся. В конце пособия даны ответы на все варианты тестов, предложены диктанты различных типов.Пособие адресовано учителям, ученикам, их родителям и всем, кому необходимо закрепить и систематизировать знания перед ЕГЭ.