Лекція № 2 Тема: Змінні і типи даних План Правила задання змінних Типи даних Функції визначення і завдання типу змінних. Логічні змінні і їх особливості в РНР Практично у всіх мовах програмування є таке поняття, як змінна. Чому я спожив вираз «Практично у всіх»? Існують і такі мови, в яких немає змінних, як таких. На щастя, РНР не відноситься до таких мов — він найзвичайніша мова, з погляду наявності змінних. Змінна — це область оперативної пам'яті, доступ до яких здійснюється по імені. Всі дані, з якими працює програма, зберігаються у вигляді змінних. Правила задання змінних Як вже наголошувалося вище, в РНР обов'язково перед ім'ям змінної потрібно ставити знак долара — так інтерпретатору легше виділити змінні з «сірої маси» тексту програми. У офіційній документації РНР сказане, що імена змінних можуть складатися не тільки з латинських букв, але з будь-яких символів, код яких більше 127. Це означає, що імена змінних можуть містити російські букви. Проте я настійно раджу вам не використовувати російськомовні імена — адже в різних кодуваннях букви кирилиці мають різні коди. Визначимо правила завдання змінних в РНР: Ім'я змінної повинне починатися із знаку долара $. Ім'я змінної не повинне містити ніяких інших символів, окрім символів латинського алфавіту, цифр і знаку підкреслення. Якщо ви використовуватимете це правило, ви істотно полегшите собі життя. Імена змінних в РНР, як і в C, чутливі до регістра символів, тобто змінні $а і $А — це здійснено разні змінні. Оголошувати змінну можна в будь-якому місці програми, але до місця першого її використання. При оголошенні змінних можна не скупитися — оголошуйте стільки, скільки вам потрібно. Звичні методи оптимізації, які застосовувалися 20 років тому (наприклад, надмірна економія пам'яті — чим менше за змінні використовує програма, тим краще), за часів перших комп'ютерів, не спрацюють: ваша програма не працюватиме швидше, якщо ви будете в збиток власному комфорту використовувати одну змінну замість 5. До того ж можна наробити помилок, які дуже важко знайти. Типи даних Змінні в РНР можуть містити все, що завгодно — будь-яку інформацію. Виняток становлять тільки константи, які можуть містити тільки число або рядок. Такого поняття як покажчик (це така змінна, яка містить не конкретне значення, а указує на область пам'яті, де знаходиться це значення), добре знайомого нам з мови C, взагалі не існує. При привласненні змінна копіюється «один в один», яку б структури вона не мала. Припустимо, що у нас є дві змінні - масив і рядок. Якщо ми першою змінною привласнимо значення другій, то наш масив буде назавжди втрачений, а змінна, яка містила масив, міститиме рядок — це і означає, що копіюється не тільки значення змінної, як в інших мовах, але і структура. Правда, починаючи з 4-ої версії, в PHP з'явилися жорсткі і м'які посилання, але про них ми поговоримо пізніше. Розглянемо наступне оголошення змінних: $а = 10; $А = "Hello"; Як ви бачите, при оголошенні змінних ми не вказали їх тип. Вибір типу здійснюється самим інтерпретатором. Проте іноді PHP може помилитися і зіставити змінній неправильний тип. Тому потрібно задати тип явно. Про те, як це зробити, ми поговоримо трохи пізніше, а поки розглянемо основні типи змінних. Типи змінних в PHP Тип змінної Опис
integer Ціле число. Діапазон значень: від -2 147 483 648 до 2 147 483 647 (32 біта). Даний тип відповідає типу long int в мові С (longint - в Pascal)
double (або float) Дійсне число дуже великої точності
string Рядок. Це дуже важливий тип, оскільки в більшості випадків сценарії займаються формуванням рядків.
array Масив
object Об’єкт. Мова РНР підтримує об’єкти. Доступ до елементів об’єкту відбувається за допомогою оператора ->
bool Логічний тип даних. Змінні цього типу можуть приймати тільки одне з двох значень: true (істина) або false (брехня)
Функції визначення і завдання типу змінних Мову PHP надає багато засобів для визначення типу змінних. Ви можете використовувати цілих сім функцій для визначення типу: Is_int(Sx) або is_integer(Sx) — повертає true, якщо передана змінна — ціле число. Is_double($x) або is_float(Sx) — повертає true, якщо передана змінна — дійсне число. is_string(Sx) — повертає true, якщо передана змінна — рядок. is_array(Sx) — повертає true, якщо передана змінна — масив. is_object($x) — повертає true, якщо змінна є об'єктом. is_bool(Sx) — повертає true, якщо змінна оголошена, як логічна. gettype(Sx) — повертає рядки, відповідні типу змінної: integer, double, string, object, array, bool або unknown type, якщо неможливо визначити тип (коли тип змінної не будовується в PHP, а додається за допомогою модулів, що розширюють можливості мови). Якщо PHP неправильно визначив тип змінної, можна вказати його явно. Для цього використовується функція settype(Sx, Stype), де $type — це один з рядків, що повертаються функцією gettype(). Наприклад: settype($x,"double"); Функція повертає значення false, якщо неможливо привести тип змінної $х до вказаного типу $type. Логічні змінні і їх особливості в PHP Напевно, ви відмітили, що більшість функцій для визначення типу повертають логічне значення true або false (всі функції, окрім gettype()). Зараз самий час поговорити про логічні змінні і пов'язаних з ними «підводними каменями». У PHP істиною є не будь-яке рівне нулю число, будь-який непорожній рядок, значення true. Значення false, порожній рядок, нуль — це брехня. Для того, щоб зрозуміти це проведемо ряд експериментів з логічними змінними. При цьому ми небагато забіжимо вперед і використовуватимемо умовного оператора If. Проте, якщо ви знайомі з якою-небудь алгоритмічною мовою (Сі, Паскаль і т.п), то без зусиль зрозумієте сенс оператора. Тим паче, що текст прикладів супроводжується докладними коментарями. Інакше ви можете повернутися до цього пункту пізніше. Отже, створіть сценарій logical.php: <? echo false; echo true; ?> Перший оператор виводить порожній рядок, тобто нічого не виводить, а другою — виведе 1. Вище було сказано, що ненульове значення приймається, як істина. У використанні логічних змінних в PHP є ще одна особливість. Якщо в операторах порівняння (= =, !=, <,") один тип є логічним, то і другий також сприймається, як логічний. Модифікуємо наш сценарій так: <? $х=10; if ($х==1) echo " Змінна рівна l\n"; if ($x==true) echo "Змінна рівна True\n"; У першому рядку змінної $х було привласнено значення 10. Потім $х порівнюється з 1 і якщо $х рівне 1, то виводиться рядок «Змінна рівна 1». Потім значення змінної $х порівнюється із значенням True. І якщо $х рівне true, то виводиться рядок «Змінна рівна True». Виходячи з приведеного вище твердження, повинна бути виведеною тільки другий рядок. Так воно і відбувається. Розглянемо ще один приклад: <? $х = 100; $у = true; echo "x= $х\ п"; echo "y= $у\ п"; if ($x==$y) echo "X=Y"; ?> Ось тут вже зовсім смішна ситуація: спочатку програма повідомляє, що X = 100, Y = 1, а потім, що X = Y.