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

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

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

Добавлен: 24.05.2024

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

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

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

всіх властивостей класу і їхніх значень за замовчуванням. Аналогічно можна одержати масив імен всіх методів класу: get_class_methods (ім’я класу )

<?php

/* Створюємо класи Статей й Особистостей. Стаття має заголовок, автора й опис. Особистість має ім’я, прізвище й e-mail */

class Article { var $title; var $author;

var $description;

// метод, що привласнює значення атрибутам класу function Article($t="Назва відсутнє",

$a="Автор відсутній", $d="Опис відсутнє"){

$this->title = $t; $this->author = $a; $this->description = $d;

}

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

$art = "<h2>$this->title</h2><font size=-1>$this->description</font><p>Автор: $this->author</p>";

echo $art;

}

}

// Визначення класу Особистостей class Person {

var $first_name; var $last_name; var $email;

//метод, що привласнює значення атрибутам класу function Person($t="Ім’я не уведене",

$a="Прізвище не уведене",$d="Email не зазначений"){ $this->first_name = $t;

$this->last_name = $a; $this->email = $d;

}

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

$art = "<h2>$this->first_name</h2><font size=-1>$this->last_name</font><p>e-mail:

$this->email</p>"; echo $art;

}

84

}

// Далі треба властиво створення й відображення екземплярів обраного класу if (isset($_GET["art_create"])){ //Якщо була обрана стаття

$art = new Article; // створюємо представника класу статей $art_vars = get_class_vars(get_class($art));

//які аргументи цього класу потрібно задати

Make_form($art,$art_vars,"art_create"); //виклик функції створення форми if (isset($_GET["create_real"])){ Show_($art_vars); }

// якщо дані цієї форми відправлені, то викликаємо функцію показу

}

//т же саме, якщо була обрана особистість if (isset($_GET["pers_create"])){

$art = new Person;

$art_vars = get_class_vars(get_class($art)); Make_form($art,$art_vars,"pers_create");

if (isset($_GET["create_real"])){ Show_($art_vars); }

}

// функція створення форми

function Make_form($art,$art_vars,$glob){

$str = "<form>";

// html код форми записується у рядок $str

//перебираємо список змінних класу

об’єкта $art

foreach ($art_vars as $var_name =>

$var_value){

$str .="$var_name<input type=text name=$var_name><br>";

//створюємо елемент форми з ім’ям властивості класу

}

 

 

$str .= "<input

type=hidden name=$glob>"; // щоб не забути, що ми створюємо

$str .= "<input

type=submit name=create_real

value=‘Create

and Show’></form>";

echo "$str";

//

виводимо форму

}

 

 

// функція показу

об’єкта

function Show_($art_vars){

global $art; //використається глобальне ім’я об’єкта

$k = count($art_vars); //число властивостей класу (змінних у формі) $p=0; //допоміжна змінна

foreach ($art_vars as $name => $value){ $p++;

if ($_GET["$name"]=="") $val= $art->$name; else $val = $_GET["$name"];

if ($p<>$k) $par .=‘"‘. $val.’",’; else $par .=‘"‘. $val.’"‘;

}

$const=get_class($art);

$par = ‘$art->‘.$const ."(" .$par.");";

85


/* тепер $par являє собою php-код для виклику методу класу $art, споконвічно записаного в $par. наприклад, $art->Person(‘Vasia’,’Petrov’,’vas@intuit.ru’); */

eval($par); // функція eval виконує код, утримується в $par $art->show();

}

?>

Листинг 6.6. Використання об’єктно-орієнтованого підходу

86

7. Лекція:

Тема: Робота з масивами даних

Мета: Лекція присвячена більше докладному вивченню масивів і функцій, убудованих в PHP для роботи з ними. Розглядаються функції для пошуку елементів у масиві, для сортування елементів масиву, а також застосування створених користувачем функцій до всіх елементів масиву, розбивка масиву на підмасиви й інше

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

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

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

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

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

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

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

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

9.Що таке механізм розширення? В чому сенс його використання?

10.Що таке оператор "::"? В чому сенс його використання?

11.Що таке оператор "parent"? В чому сенс його використання?

ПЛАН

1Масиви

2Операції з масивами

3функції обробки масивів

4Сортування масивів

5Виділення підмасива

Мова PHP надає безліч функцій для роботи з масивами даних. Як правило, ці функції вирішують завдання пов'язані з обробкою масивів, що найбільш часто зустрічаються. У цій лекції ми розглянемо деякі з таких функцій і з їхньою допомогою вирішимо кілька прикладних завдань. Зокрема, будуть розглянуті функції для пошуку елементів у масиві, для сортування елементів масиву, застосування створених користувачем функцій до всіх елементів масиву й розбивка масиву на підмасиви.

1 Масиви

В одній з перших лекцій ми розповідали про те, як можна створити масив даних. Нагадаємо, що масив можна створити двома способами:

За допомогою конструкції array

$array_name = array("key1"=>"value1", "key2"=>"value2");

Безпосередньо задаючи значення елементам масиву

$array_name["key1"] = value1;

Наприклад, нам потрібно зберігати список документів, які будуть вилучені з бази даних. Природно зберігати його у вигляді масиву, ключем у якому буде ідентифікатор документа (його унікальний номер), а значенням - назва документа. Цей масив можна створити в такий спосіб:

87


<?

$del_items = array("10"=>"Наука й життя", "12"=>"Інформатика"); $del_items["13"] = "Програмування на Php";

// додаємо елемент у масив

?>

2 Операції з масивами

Масив - це певний тип даних, з даними цього типу можуть бути здійснені певні операції. Які ж операції можна робити з масивами? Масиви можна складати й порівнювати.

Складають масиви за допомогою стандартного оператора " + ". Загалом кажучи, цю операцію відносно масивів точніше назвати об'єднанням. Якщо в нас є два масиви, $a й $b, то результатом їхнього додавання (об'єднання) буде масив $c, що складається з елементів $a, до яких праворуч дописані елементи масиву $b. Причому, якщо зустрічаються співпадаючі ключі, то в результуючий масив включається елемент із першого масиву, тобто з $a. Таким чином, якщо складаються масиви в мові PHP, від зміни місць доданків сума міняється.

<?

$a = array("й"=>"Інформатика", "м"=>"Математика");

$b = array("й"=>"Історія", "м"=>"Біологія", "ф"=>"Фізика"); $c = $a + $b;

$d = $b + $a; print_r($c);

/* одержимо: Array([й]=>Інформатика [м]=>Математика [ф]=>Фізика) */ print_r($d);

/* одержимо: Array([й]=>Історія [м]=>Біологія [ф]=>Фізика) */

?>

Приклад 7.1. Додавання масивів

Порівнювати масиви можна, перевіряючи їхню рівність чи нерівність або еквівалентність чи нееквівалентність. Рівність масивів - це коли збігаються все пари ключ / значення елементів масивів. Еквівалентність - коли крім рівності значень і ключів елементів потрібно ще, щоб елементи в обох масивах були записані в тому самому порядку. Рівність значень в PHP позначається символом " == ", а еквівалентність - символом " === ".

<?

$a = array("й"=>"Інформатика", "м"=>"Математика"); $b = array("м"=>"Математика", "й"=>"Інформатика"); if ($a == $b) echo "Масиви рівні і";

else echo "Масиви НЕ рівні і ";

if ($a === $b) echo " еквівалентні"; else echo " НЕ еквівалентні";

// одержимо echo "Масиви рівні й НЕ еквівалентні"

?>

Приклад 7.2. Порівняння масивів

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

3 Функції обробки масивів

88

Функція count

Не раз уже ми використали функцію count() , щоб обчислити кількість елементів масиву. Насправді ця функція обчислює число елементів у змінній взагалі. Якщо застосувати її до будь-якої іншої змінної, вона поверне 1. Виключення становить змінна типу NULL - count(NULL) є 0. Крім того, застосовуючи цю функцію до багатомірного масиву, щоб одержати число його елементів, потрібно використати додатковий параметр COUNT_RECURSIVE.

<?

$del_items = array("langs" => array("10"=>"Python", "12"=>"Lisp"),

"other"=>"Інформатика");

echo count($del_items) . "<br>";

// виведе 2

echo count($del_items,COUNT_RECURSIVE);

// виведе 4

?>

Приклад 7.3. Застосування функції count()

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

Функція in_array

in_array("шукане значення","масив", ["обмеження на тип"]);

дозволяє встановити, чи міститься в заданому масиві шукане значення. Якщо третій аргумент заданий як true, то в масиві потрібно знайти елемент, що збігається із шуканим не тільки за значенням, але й по типі. Якщо шукане значення - рядок, то порівняння здійснюється щодо регістра.

Наприклад, є масив не вивчених нами мов програмування. Ми хочемо довідатися, чи міститься в цьому масиві мова PHP. Напишемо наступну програму:

<?php

$langs = array("Lisp","Python","Java","PHP","Perl"); if (in_array("PHP",$langs,true))

echo "Треба б вивчити PHP<br>";

//виведе повідомлення "Треба б вивчити PHP" if (in_array("php",$langs))

echo "Треба б вивчити php<br>";

//нічого не виведе, оскільки в масиві є рядок "PHP", а не "php"

?>

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

PHP 4.2.0.

Наприклад:

<?php

$langs = array("Lisp","Python",array("PHP","Java"),"Perl"); if (in_array(array("PHP","Java"),$langs))

echo "Треба б вивчити PHP й Java<br>";

89


?>

Функція array_search

Це ще одна функція для пошуку значення в масиві. На відміну від in_array у результаті роботи array_search повертає значення ключа, якщо елемент знайдений, і значення false - у противному випадку. А от синтаксис у цих функцій однаковий:

array_search("шукане значення","масив", ["обмеження на тип"]);

Порівнюються рядки відносно регістра, а якщо зазначено опційний аргумент, то порівнюються ще й типи значень. До PHP 4.2.0, якщо шукане значення не було знайдено, ця функція повертала помилку або порожнє значення

NULL.

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

<?php

$langs = array("","Lisp","Python","Java","PHP","Perl"); if (!array_search("PHP",$langs))

echo "Треба б вивчити PHP<br>"; else {

$k = array_search("PHP",$langs); echo "PHP я вивчила $k-м";

}

?>

Приклад 7.4. Застосування функції array_search()

У результаті ми одержимо рядок:

PHP я вивчила 4-м

Очевидно, що ця функція більш функціональна, чим in_array, оскільки ми не тільки одержуємо інформацію про те, що шуканий елемент у масиві є, але й довідаємося, де саме в масиві він перебуває. А що буде, якщо шуканих елементів у масиві декілька? У такому випадку функція array_search() поверне ключ першого зі знайдених елементів. Щоб одержати ключі всіх елементів, потрібно скористатися функцією array_keys() .

Функція array_keys

Функція array_keys() вибирає всі ключі масиву. Але в неї є додатковий аргумент, за допомогою якого можна одержати список ключів елементів з конкретним значенням. Синтаксис цієї функції такий:

array_keys ("масив", ["значення для пошуку"])

Функція array_keys() повертає як строкові, так і числові ключі масиву, організувати всі значення у вигляді нового масиву із числовими індексами.

Приклад 7.5.Ми записали масив мов, які вивчили. Список був довгим, і деякі мови були записані кілька разів. У нас виникла підозра, що один з таких мов - Lisp. Давайте це перевіримо:

<?php

$langs = array("Lisp","Python","Java","PHP","Perl","Lisp"); $lisp_keys = array_keys($langs,"Lisp");

90


echo "Lisp входить у масив ". count($lisp_keys)." рази:<br>"; foreach ($lisp_keys as $val){ echo "під номером $val <br>";

}

?>

Приклад 7.5. Застосування функції array_keys()

У результаті одержимо:

Lisp входить у масив 2 рази: під номером 0 під номером 5

Функція array_keys(), як і дві попередні, залежить від регістра, тобто елементів LISP у масиві вона не знайде. array_keys() з'явилася тільки в PHP4.

Якщо є функція для одержання всіх ключів масиву, то можна припустити, що існує й функція для одержання всіх значень масиву. Дійсно, вона існує. Це функція array_values(масив). Всі значення переданого їй масиву записуються в новий масив, проіндексований цілими числами, тобто всі ключі масиву губляться, залишаються тільки значення. Але повернемося до нашого приклада.

Отже, ми з'ясували, що мова Lisp випадково згадається у нашому масиві двічі. Оскільки вивчити одну мова двічі не можна ("учив, але забув" не рахуться), те потрібно якось позбутися від повторюваних мов. Зробити це досить просто за допомогою функції array_unique() .

Функція array_unique

Функція array_unique (масив) повертає новий масив, у якому повторювані елементи фігурують в одному екземплярі. Таким чином, замість декількох однакових значень й їхніх ключів ми маємо одне значення. Який у нього буде ключ? Як з декількох ключів однакових елементів вибирається той, котрий буде збережений у новому масиві? Відбувається наступне. Всі елементи масиву перетворяться в рядки й сортуються. Потім оброблювач запам'ятовує перший ключ для кожного значення, а інші ключі ігнорує.

Спробуємо позбутися від повторюваних мов у списку вивчених.

<?php

$langs = array("Lisp","Java","Python","Java","PHP","Perl","Lisp"); print_r(array_unique($langs));

?>

Одержимо наступне:

Array ( [0] => Lisp [1] => Java [2] => Python [3] => PHP [4] => Perl )

Далі розглянемо завдання сортування масиву.

4 Сортування масивів

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

91

Функція sort

Функція sort має наступний синтаксис

sort (масив [, прапори])

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

Приклад 7.6.Нехай у нас є два масиви: ціни товарів - їхньої назви й, навпаки, назви товарів - їхньої ціни. Упорядкуємо ці масиви по зростанню:

<?

$items = array(10 => "хліб", 20 => "молоко", 30 => "бутерброд"); sort($items);

//рядки сортуються в алфавітному порядку, ключі губляться print_r($items);

$rev_items = array("хліб" => 10, "бутерброд" => 30, "молоко" => 20); sort($rev_items);

//числа сортуються по зростанню, ключі губляться

print_r($rev_items); ?>

Приклад 7.6. Застосування функції sort()

Одержимо:

Array ( [0] => бутерброд [1] => молоко [2] => хліб )

Array ( [0] => 10 [1] => 20 [2] => 30)

Як додатковий аргумент може використатися одна з наступних констант:

SORT_REGULAR - порівнювати елементи масиву звичайним образом;

SORT_NUMERIC - порівнювати елементи масиву як числа;

SORT_STRING - порівнювати елементи масиву як рядка.

Функції asort, rsort, arsort

Якщо потрібно зберігати індекси елементів масиву після сортування, то потрібно використати функцію asort (масив [, прапори]) . Якщо необхідно відсортувати масив у зворотному порядку, тобто від найбільшого значення до найменшого, то можна задіяти функцію rsort (масив [, прапори]) . А якщо при цьому потрібно ще й зберегти значення ключів, то варто використати функцію arsort(масив [, прапори]) . Як ви, напевно, помітили синтаксис у цих функцій абсолютно такий же, як у функції sort . Відповідно й значення прапорів можуть бути такими ж, як в sort : SORT_REGULAR , SORT_NUMERIC , SORT_STRING . До речі кажучи, прапор SORT_NUMERIC з'явився тільки в PHP4.

<?php

$books = array("Пушкін"=>"Руслан і Людмила", "Толстой"=>"Війна й мир", "Лермонтов"=>"Герой нашого часу");

asort($books);

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

92