Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
30.05.2020
Размер:
655.36 Кб
Скачать

7.4 Написання коду класу

Конструктори

Конструктор являє собою метод, що задає значення деяких властивостей (а також може викликати інші методи). Конструктори викликаються автоматично при створенні нових об'єктів. Щоб це стало можливим, ім'я методу-конструктора повинне збігатися з ім'ям класу, у якому він утримується. Приклад конструктора:

<?

class Webpage {

var $bgcolor;

functіon Webpage($color) {

$thіs->bgcolor = $color;

}

}

// Викликати конструктор класу Webpage

$page = new Webpage("brown");

?>

Можна викликати конструктор, що просто створює об'єкт, але не ініціалізує його властивості:

$page = new Webpage;

Об'єкт можна створити за допомогою конструктора, визначеного в класі:

$page = new Webpage("brown");

Деструктори

У РНР відсутня безпосередня підтримка деструкторів. Проте, ви можете легко імітувати роботу деструктора, викликаючи функцію РНР unset(). Ця функція знищує вміст змінної й повертає займані нею ресурси системі. З об'єктами unset() працює так само, як і зі змінними. Допустимо, ви працюєте з об'єктом $Webpage. Після завершення роботи із цим конкретним об'єктом викликається функція:

unset($Webpage);

Ця команда видаляє з пам'яті весь уміст $Webpage. Необхідність у виклику деструкторів виникає лише при роботі з об'єктами, що використовують великий обсяг ресурсів, оскільки всі змінні й об'єкти автоматично знищуються по завершенні сценарію.

Звертання до елементів класів

Звертання до елементів класів здійснюється за допомогою оператора :: "подвійна двокрапка". Використовуючи "подвійну двокрапку", можна звертатися до методів класів.

При звертанні до методів класів, програміст повинен використовувати імена цих класів.

<?php

class A {

functіon example() {

echo "Це первісна функція A::example().<br>";

}

}

class B extends A {

functіon example() {

echo "Це перепевна функція B::example().<br>";

A::example();

}

}

// Не потрібно створювати об'єкт класу A.

// Виводить наступне:

// Це первісна функція A::example().

A::example();

// Створюємо об'єкт класу B.

$b = new B;

// Виводить наступне:

// Це перепевна функція B::example().

// Це первісна функція A::example().

$ b-b->example();

?>

7.5 Поліморфізм

Поліморфізм є наслідком ідеї спадкування. Поліморфність класу - це властивість базового класу використовувати функції похідних класів, навіть якщо на момент визначення ще невідомо, який саме клас буде включати його в якості базового й, тим самим, ставати від нього похідним.

Розглянемо властивість поліморфності класів на основі наступного приклада:

<?php

class A {

// Виводить, функція якого класу була викликана

functіon Test() { echo "Test from A\n"; }

// Тестова функція - просто переадресує на Test()

functіon Call() { Test(); }

}

class B extends A {

// Функція Test() для класу B

functіon Test() { echo "Test from B\n"; }

}

$a=new A();

$b=new B();

?>

Використовуємо наступні команди:

$ a-a->Call(); // виводить "Test from A"

$ b-b->Test(); // виводить "Test from B"

$ b-b->Call(); // Увага! Виводить "Test from B"!

Зверніть увагу на останній рядок: всупереч очікуванням, викликається не функція Test() із класу A, а функція із класу B! Складається враження, що Test() з B просто перевизначила функцію Test() з A. Так воно насправді і є. Функція, переобумовлена в похідному класі, називається віртуальної.

Соседние файлы в папке Конспект