ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 25.05.2024

Просмотров: 62

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

6. Лекція:

Тема: Об’єкти й класи в PHP:.

Мета: дати визначення понять ООП в РНР - Поняття розширення класу. Конструктори. Оператор :: Базовий класоа і функція parent. Приклад - автоматична генерація за бажанням користувача представників класів статей або особистостей, а також їхнього відображення на сторінці браузера.

  1. Що таке, у вашому розумінні, функція? Для чого потрібні функції?

  2. Що таке параметри функції? В чому їх призначення?

  3. Скільки параметрів може мати функція?

  4. Як викликати функцію?

  5. Як можна передати дані до функції?

  6. Чи завжди кількість аргументів функції однакова?

  7. Яким чином можна визначити кількість та тип аргументів функції?

  8. Що таке Статичні змінні? В чому їх призначення?

  9. Як повертаються результати роботи функції?

  10. Перерахуйте відомі вам вбудовані функції.

ПЛАН

1 Класи та об’єкти

2 Ініціалізація змінних

3 Об’єкти

4 Спадкування extends

5 Оператор ::

6 Оператор parent

У цій лекції ми розглянемо об’єктну модель, пропоновану мовою PHP. Будуть представлені поняття класу та об’єкта, способи їхнього завдання й використання, способи розширення класів, конструктори класів, механізми спадкування й т.п. Крім того, ми торкнемося деяких нововведень, що стосуються об’єктної моделі, що з’явилися в PHP5.

1 Класи та об’єкти

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

В PHP клас визначається за допомогою наступного синтаксису:

class Ім’я_класу{

var $ім’я_властивості; /*список властивостей*/

function ім’я_методу( ){ /* визначення методу */ }

/*список методів*/

}

Імена властивостей об’єктів класу оголошуються за допомогою ключового слова var, методи, застосовні до об’єктів даного класу, описуються функціями. Усередині визначення класу можна використати ключове слово this для звертання до поточного представника класу.


Наприклад, нам потрібно створити клас, що описує категорію статей. У кожної статті є такі властивості, як назва, автор і короткий зміст. Які дії ми бажаємо здійснювати зі статтями? Можливо, нам знадобиться задавати значення перерахованим властивостям статті, відображати статтю в браузері. Тоді визначення цього класу може виглядати в такий спосіб:

<?

class Articles { // Створюємо клас Статей

var $title;

var $author;

var $description;

// метод, що привласнює значення атрибутам класу

function make_article($t, $a, $d){

$this->title = $t;

$this->author = $a;

$this->description = $d;

}

//метод для відображення екземплярів класу

function show_article(){

$art = $this->title . "<br>" .

$this->description .

"<br>Автор: " . $this->author;

echo $art;

}

}

?>

Отже, для опису фізичних об’єктів типу "стаття" ми створили клас із ім’ям Articles, що складається із трьох змінних, утримуючі характеристики статті, і двох функцій для створення конкретної статті й для її відображення.

Як відомо, працюючи з PHP, можна періодично перемикатися в режим HTML. У цьому випадку програма складається з декількох фрагментів (блоків) коду. Визначення класу не можна розносити по різних блоках php-коду й тим більше по різних файлах.

Кілька зауважень із приводу імен класів. Ім’я класу повинне задовольняти правилам іменування об’єктів у мові PHP, але є ряд імен, які зарезервовані розробниками для своїх цілей. У першу чергу це імена, що починаються із символу підкреслення "_". Для створення класів і функцій не можна використати такі імена. Крім того, зарезервоване ім’я stdClass, оскільки воно використається усередині движка PHP.


2 Ініціалізація змінних

Часто деяким атрибутам класу буває необхідно привласнювати значення відразу після створення представника класу. Коли ми створювали клас статей, для присвоювання значень атрибутам ( властивостям ) класу ми використали спеціальну функцію make_article(). Загалом кажучи, ми вчинили не зовсім вірно, тому що зайнялися винаходом велосипеда. Спеціально для завдання початкових значень атрибутам класу існує два стандартних методи. В PHP4 можна ініціалізувати значення за допомогою оператора var або за допомогою функції конструктора. За допомогою var можна ініціалізувати тільки константні значення. Для завдання не константних значень використовують функцію конструктор, що викликається автоматично, коли об’єкт конструюється із класу. Функція-конструктор повинна мати ім’я, що збігається з ім’ям усього класу, у якому вона визначена.

Приведемо приклад. Допустимо, при створенні об’єкта "стаття" ми хочемо встановити його властивості в такий спосіб: автора - рівним рядку "Іванов", назва й короткий зміст - відповідним елементам глобального масиву $_POST, а дату публікації статті - поточній даті.

<?

class Articles { // Створюємо клас Статей

var $title;

var $author = "Іванов";

var $description;

var $published;

// метод, що привласнює значення атрибутам класу

function Articles(){

$this->title = $_POST["title"];

$this->description = $_POST["description"];

$this ->published = date("Y-m-d"); }

}

?>

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

3 Об’єкти

В одній з перших лекцій ми згадували про існування в PHP такого типу даних, як об’єкт. Клас - це опис даних одного типу, даних типу об’єкт. Класи є ніби шаблонами для реальних змінних. Змінна потрібного типу створюється із класу за допомогою оператора new. Створивши об’єкт, ми можемо застосовувати до нього всі методи й одержувати всі властивості, наявні в описі класу. Для цього використовують такий синтаксис:

$ім’я_об’єкта->назва_властивості

або

$ім’я_об’єкта->назва_методу (список аргументів).

Помітимо, що перед назвою властивості або методу знак $ не ставлять.


<?php

$art = new Articles;

// створюємо об’єкт $art

echo ($art ->title);

// виводимо назва об’єкта $art

$another_art = new Articles;

// створюємо об’єкт $another_art

$another_art->show_article();

// викликаємо метод для відображення об’єкта в браузер

?>

Приклад 6.1. Доступ до методів і властивостей об’єкта

Кожний з об’єктів класу має ті самі властивості й методи. Так, в об’єкта $art й в об’єкта $another_art є властивості title, description, author і методи Articles(), show_article(). Але це два різних об’єкти. Уявимо собі об’єкт як директорію у файловій системі, а його характеристики - як файли в цій директорії. Очевидно, що в кожній директорії можуть лежати однакові файли, але проте вони вважаються різними, оскільки зберігаються в різних директоріях. Точно так само властивості й методи вважаються різними, якщо вони застосовуються до різних об’єктів. Щоб одержати потрібний файл із директорії верхнього рівня, ми пишемо повний шлях до цього файлу. При роботі із класами потрібно вказувати повне ім’я функції, що ми хочемо викликати. Директорією верхнього рівня в PHP буде простір глобальних змінних, а шлях указується за допомогою роздільника ->. Таким чином, імена $art->title й $another_art->title позначають дві різні змінні. Змінна в PHP має тільки один знак долара перед ім’ям, тому не можна писати $art->$title. Ця конструкція буде розглянуте не як звертання до властивості title об’єкта $art, а як звертання до властивості, ім’я якого задано змінної $title (наприклад, $art->"" ).

<?php

$art->title = "Введення в Internet";

// так можна встановити значення властивості об’єкта

$art->$title = "Введення в Internet";

// так не можна встановити значення властивості об’єкта

$property = "title";

$art->$property = "Введення в Internet";

// так можна встановити значення властивості об’єкта

?>

Приклад 6.2. Установка значень властивостей

Створюючи клас, ми не можемо знати, яке ім’я буде мати об’єкт цього класу, тим більше що об’єктів може бути багато й усі можуть мати різні імена. Відповідно ми не знаємо, як звертатися до об’єкта усередині визначення класу. Для того щоб мати доступ до функцій і змінним усередині визначення класу, потрібно використати псевдозмінну $this. Наприклад, $this->title повертає значення властивості title у поточного об’єкта даного класу. Іноді цю змінну пропонують читати як "моє власне" (приміром, стосовно властивості ).