Файл: Лабораторна робота 14 ООП в РНР.doc

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

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

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

Добавлен: 16.05.2024

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

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

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

Лабораторна робота №14

Тема: Об’єктно-орієнтоване програмування на РНР.

Мета: познайомитися з основами об’єктно-орієнтованого програмування на РНР, навчитися створювати класи об’єктів та виконувати ініціалізацію об’єктів, написання методів.

Теоретичні відомості

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

В 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.


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

Часто деяким атрибутам класу буває необхідно привласнювати значення відразу після створення представника класу. Коли ми створювали клас статей, для присвоювання значень атрибутам ( властивостям ) класу ми використали спеціальну функцію 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.

Об’єкти

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

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

або

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

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

<?php

$art = new Articles;


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

echo ($art ->title);

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

$another_art = new Articles;

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

$another_art->show_article();

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

?>

Приклад 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";

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

?>

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

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


Порядок виконання  завдання:

  1. Створити у файлі class.php за допомогою стандартних засобів Microsoft Windows  користувальницький клас Coor із полем даних $name та методами Setname та Getname. Створити об’єкт цього класу, надати йому значення «Nick» та вивести це значення на екран.

Для виконання завдання скористайтеся скриптом:

<?php class Coor{ var $name; function Getname() {echo $this->name; } function Setname($text) { $this->name=$text; } } $object = new Coor; $object->Setname("Nick"); echo "Нoвый обьект класса "; $object->Getname(); ?>

Результат виконання представлений на малюнку 1.

Малюнок 1 Створення об’єкту класу

  1. Створити  клас Webpage і в ньому створити конструктор. Записати скрипт у файл з розширенням .php. Скористайтеся наступним фрагментом коду:

<? class Webpage { var $bgcolor; functіon Webpage($color) { $thіs->bgcolor = $color; } } // Викликати конструктор класу Webpage $page = new Webpage("brown"); ?>

  1. Внесіть зміни до попереднього файлу, застосувавши функцію unset для знищення об’єкту класу. У разі успішного знищення виведіть на екран напис: «Объект удален успешно!». Змінений файл збережіть.

Результат виконання представлений на малюнку 9.2.

Малюнок 2 – Знищення об’єктів классу

  1. Створіть у файлі zvernennya.php два класи базовий А та дочірній В. Запишіть у кожному з цих класів метод example. Створіть об’єкт класу В. Викличте метод eхample класу В.

<?php class A {     functіon example() {     echo "Це первісна функція A::example().<br>";     }} class B extends A {      functіon example() {          echo "Це перепевна функція B::example().<br>";          A::example();     }} $b = new B; $ b-b->example(); ?>

  1. Збережіть отриманий код. Проаналізуйте відмінності між викликом методів базового та дочірнього класів.

Завдання для самостійного виконання:

  1. Іноді виникає необхідність виконати ініціалізацію об'єкта - привласнити його властивостям первісні значення. Створіть у файлі init.php клас з ім'ям Coor, що містить дві властивості: ім'я людини і місто його проживання. Написати метод (функцію), що буде виконувати ініціалізацію об'єкта, наприклад Іnіt().

  2. Внесіть зміни до попереднього файлу таким чином, щоб ініціалізація об’єкта викликалася автоматично при створенні об’єкту класу. Збережіть отриманий результат.


Контрольні питання

  1. Дайте визначення об’єкту.

  2. Дайте визначення класу.

  3. Що входить в опис класу?

  4. Для чого використовується ключове слово this?

  5. Які існують обмеження на імена класів?

  6. Яким чином ініціалізуються змінні класу?

  7. Як створюється об’єкт класу?

  8. Що таке успадкування? Яким чином відбувається успадкування в мові РНР?