Объявление класса
Классы образуют синтаксическую базу объектно-ориентированного программирования. Их можно рассматривать как своего рода «контейнеры» для логически связанных данных и функций (обычно называемых методами). Класс представляет собой шаблон (чертеж), по которому создаются конкретные экземпляры, используемые в программе. Экземпляры классов называются объектами. Класс также можно рассматривать как тип данных, а объект — как переменную.
Общий формат классов РНР:
class Class_name {
var $attribute_1;
...
var $attribute_N;
function function1() {
...
}
...
function functionN() {
...
} // end Class_name
Объявление класса должно начинаться с ключевого слова class. Каждому объявлению атрибута, содержащегося в классе, должно предшествовать ключевое слово var. После объявлений атрибутов следуют объявления методов, очень похожие на типичные объявления функций. При ссылках на атрибуты внутри методов используется специальная переменная $this. Синтаксис методов продемонстрирован в следующем примере:
class Webpage {
var $bgcolor;
function setBgColor($color) { $this->bgcolor = $color; }
function getBgColor() {return $this->bgcolor;}
}
Переменная $thisссылается на экземпляр объекта, для которого вызывается метод. Атрибут, на который вы ссылаетесь в методе, не нужно передавать в виде параметра функции; знак доллара ($) ставится перед переменной $this, но не перед именем атрибута.
Объекты создаются оператором new. Например, объект класса Webpage создается следующей командой: $home_page = new Webpage;
Новый объект с именем $home_page обладает собственным набором атрибутов и методов, перечисленных в классе Webpage. Для изменения значения атрибута $bgcolor, принадлежащего этому конкретному объекту, можно воспользоваться определенным в классе методом setBgColor( ):
$home_page->setBgColor("black");
Можно явно получить значение атрибута указанием имен объекта и атрибута: $home_page->bgcolor;
Конструкторпредставляет собой метод, который задает значения некоторых атрибутов (а также может вызывать другие методы). Конструкторы вызываются автоматически при создании новых объектов. Чтобы это стало возможным, имя метода-конструктора должно совпадать с именем класса, в котором он содержится.
Пример конструктора
class Webpage {
var $bgcolor;
function Webpage($color) {
$this->bgcolor = $color;
}
}
// Вызвать конструктор класса Webpage
$page = new Webpage("brown");
Роль деструкторавыполняет функция unset( ) котороя уничтожает содержимое переменной и возвращает занимаемые ею ресурсы системе. С объектами unset( ) работает так же, как и с переменными (пример, unset($Webpage);). Можно поместить вызов unset( ) в метод с именем destroy( ) и затем вызвать его:
$Website->destroy( );
Концепция получения классом характеристик от другого, более общего класса называется наследованием. В общем случае синтаксис наследования характеристик другого класса выглядит так:
class Class_name2 extends Class_name1 {
объявления атрибутов;
объявления методов;
}
Ключевое слово extendsговорит о том, что класс Class_name2 наследует все характеристики класса Class_name1. Вызов конструктора производного класса не приводит к автоматическому вызову конструктора базового класса.
Пример. Представление различных типов транспортных средств при помощи наследования
// Транспортное средство
class Vehicle {
var $model;
var $current_speed;
function setSpeed($mph) {
$this->current_speed = $mph;
}
function getSpeed() {
return $this->current_speed;
}
}
// Автомобиль
class Auto extends Vehicle {
var $fue1_type;
function setFuelType($fuel) {
$this->fuel_type = $fuel;
}
function getFuelType() {
return $this->fuel_type;
}
}
// Самолет
class Airplane extends Vehicle {
var $wingspan;
function setWingSpan($wingspan) {
$this->wingspan = $wingspan;
}
function getWingSpan() {
return $this->wingspan;
}
}
Объекты этих классов создаются следующим образом:
$tractor = new Vehicle;
$gulfstream = new Airplane;
Приведенные команды создают два объекта. Первый объект, $tractor, относится к классу Vehicle. Второй объект, $gulfstream, относится к классу Airplane и потому обладает как общими характеристиками класса Vehicle, так и уточненными характеристиками класса Airplаne.
С увеличением размеров и сложности программ может возникнуть необходимость в многоуровневом наследовании. Иначе говоря, класс будет наследовать свои свойства от других классов, которые, в свою очередь, будут наследовать от третьих классов и т. д.
Дата добавления: 2015-04-15; просмотров: 680;