ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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