Язык программирования PHP



         

Оператор ::


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

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

<?php 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 . "!<br>"); } } 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 . "!<br>"); } function say_hello(){ echo "Привет!<br>"; } } 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, если только порожденный класс не переопределяет эти свойства и методы, как в нашем примере.




Содержание  Назад  Вперед