Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Пример с различными уровнями доступа

Пример:

<?php // определяем класс class Fio_Class {   public $first_name;   protected $second_name;   private $family;     function set_name ($par1, $par2, $par3 )   {     $this->first_name = $par1;     $this->second_name = $par2;     $this->family = $par3;   }   public function set_first ($par1 )   {     $this->first_name = $par1;   }   protected function set_second ($par1)   {     $this->second_name = $par1;   }   private function set_family ($par1 )   {     $this->first_family = $par1;   } } class Employer_Class extends Fio_Class {     public $department;     function set_name2($par1, $par2, $par3, $par4 )     {       // метод определен без указания уровня доступа значит,       // будет public корректный вызов       $this->set_name( $par1, $par2, $par3 );       // вызываем public метод       // корректный вызов       $this->set_first( $par1 );       // вызываем protected метод       // корректный вызов       $this->set_second( $par2 );       // вызываем private метод       // !!! не корректный вызов !!!       $this->set_family( $par3 );       // public свойство, можем присвоить значение       $this->first_name = $par1;       // protected свойство, можем присвоить значение       $this->second_name = $par2;       // !!! private свойство, значение присваивать нельзя       $this->$family = $par3;    } } // создаем объект $obj1 = new Employer_Class(); // вызываем метод для объекта $obj1->set_name2( "Иван", "Иваныч", "Иванов", "Менеджер" ); // будет ошибка, поскольку пытаемся получить доступ // к private свойству echo $obj1->family . "<br />"; // будет ошибка, поскольку пытаемся получить доступ // к protected свойству echo $obj1->second_name . "<br />"; ?>

Абстрактные классы и интерфейсы

В PHP поддерживаются понятия абстрактного класса и интерфейса.

Абстрактный класс может использоваться только в качестве базового, т.е. нельзя создать объект абстрактного класса при помощи конструкции new. Методы абстрактного класса могут не иметь реализации (т.е. специфицируется только вызов, а сам программный код метода может отсутствовать). Абстрактный класс задается ключевым словом abstract перед именем класса.

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

Примеры абстрактных классов и интерфейсов:

<?php // абстрактный класс abstract class Screen_Obj_Class {   protected $x1;   protected $y1;   protected $x2;   protected $y2;   public function setCoord( $x1, $y1, $x2, $y2 )   {     $this->x1 = $x1;     $this->y1 = $y1;     $this->x2 = $x2;     $this->y2 = $y2;   }   public function width()   {     return $this->x2 - $this->x1;   } } // это интерфейс 1 interface print_data {   function print_x1(); } // это интерфейс 2 interface display_data {   function display_x1(); } // класс наследует абстрактный класс и реализует интерфейсы class Label_Class     extends Screen_Obj_Class   implements print_data, display_data {   public $label;   // это реализация интерфейса 1   function print_x1()   {     echo "<br />interface 1: x1 = $this->x1<br />";   }   // это реализация интерфейса 2   function display_x1()   {     echo "<br />interface 2: x1 = $this->x1<br />";   } }; $l1 = new Label_Class(); $l1->setCoord( 10, 10, 25, 25 ); // вызываем метод абстрактного класса echo $l1->width(); // вызываем метод реализации интерфейса 1 echo $l1->print_x1(); // вызываем метод реализации интерфейса 2 echo $l1->display_x1(); ?>