| Синтаксис PHP |
|
Синтаксис PHP багато в чому запозичений з таких мов як C, Java і Perl. Тому, якщо ви знайомі хоча б однією з них - вам не складно буде просто сісти і почати писати програми на PHP. Тут ми детально не зупинятимемося на описі синтаксису - він добре описаний в PHP Manual. Проте мені хотілося б зупинитися на деяких аспектах, які відрізняють PHP від інших мов.
Імена змінних Будь-яка змінна в PHP має ім'я, що починається із знаку $, наприклад $variable. Людям, які звикли до C/С++-подібним мовам цей принцип іменування змінних може здатися дивним, але насправді такий підхід має певні переваги. При такому способі формування імен змінних їх дуже легко відрізнити від остального коду. Якщо в інших мовах інколи може виникати плутанина з тим, що при першому погляді на код не завжди ясно - де тут змінні, а де функції, то в PHP це питання навіть не встає. Даний принцип дозволяє дуже просто і елегантно реалізувати функціональність, просто недоступну інакше. Наприклад, ссилка на змінну по її імені, що зберігається в іншій змінній: $name = "value"; $value = 5; echo $$name; В даному прикладі PHP виведе результат 5. Такі фокуси стали можливі із-за закладеного в PHP принципу: “anything is an expression” (будь-яка річ є виразом). Виходячи з цього PHP сприймає вираз $$name таким чином: парсер зустрічає символ $, а це означає, що наступний вираз є ім'ям змінної. Парсер зустрічає ще один символ $, і продовжує пошуки імені вже іншій змінній, значення якої необхідне для обчислення значення попереднього вирзу. Парсер отримує ім'я name, знаходить змінну з таким ім'ям, бере її значення (‘value’) і повертається назад. Оскільки на попередньому кроці ми шукали ім'я змінної, те значення тільки що обчисленого виразу сприймається саме як ім'я змінної. Парсер шукає змінну з таким ім'ям (value) і повертає її результат (5). Рядки Можливість однозначно ідентифікувати змінну дозволила розробникам PHP дати можливість програмістам використовувати змінні безпосередньо усередині рядків! $name = "john"; $age = 23; echo "$name is $age years old"; Як результат ми отримаємо рядок: John is 23 years old. Це дуже зручно. Проте необхідно звернути вашу увагу на одну деталь - в PHP, на відміну від багатьох інших мов, розрізняються рядки, взяті в одинарні і подвійні лапки. І подібне заміщення імен змінних їх значеннями виробляється лише в рядках, взятих в подвійні лапки! $man = array("john",23); echo "{$man[0]} is {$man[1]} years old"; Результат буде таким же, як і в попередньому прикладі. Ще однією цікавою особливістю роботи PHP з рядками є підтримка так званого способу here docs. Нижче наведений приклад: $var="PHPist"; $text=<<HERE <span>$var</span> HERE; echo $text; ?> В цьому випадку значенням змінної буде весь текст, що міститься між початковим і кінцевим маркерами (в даному випадку це рядок HERE, але цей маркер може бути будь-якою послідовністю символів). Ознакою того, що це here doc, є наявність << безпосередньо після знаку присвоєння. Даний механізм дуже зручний у випадку, якщо рядку необхідно присвоїти якийсь складний текст, особливо, якщо необхідно зберегти його форматування. До речі, в разі використання here docs ви також маєте можливість використання змінних усередині рядка як це було описано раніше.
Масиви Масиви в PHP - це дуже потужний і гнучкий механізм. Він дозволить вам зробити практично все, що можна зробити з масивами. Підтримуються як звичайні, так і асоціативні масиви, причому вони можуть бути змішані у будь-якому порядку навіть в межах одного масиву. Підтримуються вкладені масиви, їх вкладеність ніяк явно не обмежена. В PHP є велика кількість функцій для роботи з масивами, вони допоможуть виконати більшість необхідних операцій без зайвих витрат часу і сил. Крім того, необхідно відзначити ще одну особливість PHP при роботі з масивами: на відміну від інших мов PHP дозволяє задавати масиви практично будь-якої складності безпосередньо в тілі програми! Можливо з першого погляду ця можливість не здасться вам такою вже важливою, проте це не так. У вашій практиці вам не раз доведеться зіткнутися з необхідністю опису якої-небудь складної структури даних і наповненням цієї структури даними. У інших мовах для цього як правило доводиться писати додатковий код, що не завжди зручно. В PHP можна зробити це дуже просто і елегантно: $data = array(1,10,100,1000, // Чисельні дані "some text","another text", // Строкові дані "name"=>"john","age"=>23, // Асоціативні зв'язки в масиві "date"=>array('day'=>10,'month'=>'may','year'=>2001)); //Вкладений масив Як бачите - різні дані можуть бути поєднані разом в єдиній структурі без яких-небудь проблем! Подивимось, як можна звернутися до цих даних:
echo $data[1]; // Результат - 10 echo $data[5]; // Результат - 'another text' echo $data['age']; // Результат - 23 echo $data['date']['month']; // Результат - 'may' Велика кількість інформації і прикладів, а також описи функцій для обробки масивів можна знайти в PHP Manual. Variable scope Англійський термін, винесений в заголовок перекладається на український як “область видимості змінної”. Під цим терміном мається на увазі те, що будь-яка змінна, описана в програмі має свою зону видимості, іншими словами якщо змінна описана в якомусь місці програми, то це зовсім не означає, що вона автоматично стає видимою в будь-якому іншому місці цієї програми. В PHP із цього приводу є свої особливості. “Найдивніша” річ, з якою стикається людина при знайомстві з PHP це те, що змінна, описана поза функцією невидима всередині неї! У інших мовах програмування ми звикли до того, що глобальні змінні програми видно скрізь, але в PHP це не так. Але поглянувши на це “дивацтво” уважніше можна відмітити, що вона має більше вигоди, ніж незручностей, оскільки є свого роду “захисним механізмом”, який не дозволить вам випадково переплутати локальну і глобальну змінну, що часом приводить до дуже тяжких наслідків. Як же дістати доступ до глобальних змінних з функції? 1. Використовувати суперглобальний асоціативний масив $GLOBALS. Це єдина змінна в PHP, яка видима звідусіль і яка містить в собі всі глобальні змінні, наявні в програмі. Якщо ви усередині функції звертаєтеся до змінної $variable – то це ви звертаєтеся до локальної змінної, а якщо $GLOBALS[’variable’] - то до глобальної. function myfunction() { $variable = 5; // Присвоюємо значення локальної змінної $GLOBALS[''variable''] = 10; // Присвоюємо значення глобальної змінної }; 2. Використовувати ключове слово global. Воно дозволить вам задати список глобальних змінних, які будуть видимі всередині функції: function myfunction() { global $variable; // Присвоюємо значение глобальній змінній $variable = 10; }; |