Оператор - це опис деякої дії, що інтерпретатор повинен зробити з зазначеними змінними. Оператори входять в більшість виразів і дозволяють змінювати або порівнювати значення змінних. Змінні, з якими пов'язаний оператор, називаються операндами. У попередньому уроці ми вже використали 3 оператора: присвоєння "=", порівняння ">" і конкатенації (об'єднання) рядків ".";
Не треба плутати вирази й оператори. Оператор лише визначає необхідну дію, а вираз - це є завершений маленький фрагмент програми, в який можуть входити оператори, змінні, константи і т.п.
Важлива властивість операторів - пріоритет (інакше називається "старшинство" або "вага"). Це властивість визначає в якій послідовності будуть виконуватися фрагменти одного виразу. У попередньому уроці ми трохи торкнулися цієї теми, коли розглядали вкладеність виразів.
Друга важлива властивість - асоціативність. Властивість визначає в якому напрямку обчислюються пременися, до яких застосовується оператор. Оператор може бути "асоціативним зліва", "асоціативним справа" або НЕ асоціативним. Ліва асоціативність означає що значення операндів обчислюються зліва направо, а права асоціативність - навпаки. Приклад "лівого" оператора - складання, приклад правого - привласнення.
У таблиці перераховані оператори в порядку убування пріоритету. Оператори, які стоять на одному рядку, обчислюються з урахуванням асоціативності.
У рядку "$ assoc = 3 * 3% 5;" використовується відразу 3 оператора: привласнення "=", множення "*" і розподіл по модулю "%". З таблиці видно, перший оператор в вираженні (вважається зліва-направо) - привласнення. Це "правий" і найменш пріоритетний оператор. значить в першу чергу треба обчислити правий операнд ( "3 * 3% 5"). Правий операнд - вираз з двома "ліві" операторами рівного пріоритету. Тому обчислення проводиться просто послідовно зліва направо. Результат обчислення правого операнда стає операндом оператора прісоенія. Результат виконання всіх операцій - змінна $ assoc отримує значення 4.
типи операторів
Всі оператори поділяються на 11 груп:
- арифметичні
- присвоєння
- бітові
- порівняння
- контролю помилок
- виконання
- Інкремента / декремента
- Логічні
- строкові
- Оператори масивів
- Оператори типів
арифметичні оператори
Значення з протилежним знаком
Сума двох операндів
Різниця двох операндів
Добуток двох чисел
Приватне двох чисел
Розподіл по модулю
Залишок від цілочисельного ділення
У наступних уроках ми неодноразово використовуватиме оператор%, тому зупинюся на ньому докладніше. Результат ділення по модулю - це мінімальна різниця між вихідним значенням і значення, рівного делителю, помноженому на цілу частину звичайного приватного. Наприклад, 12% 5 = 2, тому що 12% 5 = 12 - (5 * [12/5]) = 12 - (5 * [2.4]) = 12 - (5 * 2) = 12 - 10 = 2.
На практиці розподіл $ a по модулю $ b вручну робиться так:- Ділимо $ a на $ b, отримуємо $ c
- Якщо $ c дорівнює нулю, значить $ a% $ b = 0
- Якщо $ c не дорівнює нулю, відкидаємо від $ c дробову частину, отримуємо $ d
- Множимо $ b на $ d і отримане значення віднімаємо з $ a
- Результат віднімання - це і є результат ділення $ a по модулю $ b
Оператори присвоєння
Оператор присвоєння "=" ми вже пояснювали і використовували дещо раніше. Але крім звичайного присвоєння в PHP є ще кілька розширених операторів присвоєння. Розширений оператор складається з оператора присвоєння і стоїть перед ним модифицирующего оператора. Наприклад, в операторі "+ =" модифицирующим оператором будемо "+" підсумовування.
Логіка роботи складеного оператора проста: модифікує оператор застосовується до операндам, після чого результат присвоюється лівому операнду. наприклад:
бітові оператори
Бітові операції призначені для зміни значень окремих бітів змінних. Ці оператори працюють за тими ж принципами, що і звичайні логічні оператори, тільки результат - значення біта (0 чи 1), а не TRUE або FALSE.
TRUE якщо $ a більше або дорівнює $ b
При використанні операцій порівняння слід пам'ятати, що PHP неявно робить перетворення типів. Наприклад, якщо порівнюється числове значення з рядком, то рядок конвертується в число, а якщо порівнюються два рядки, що складаються тільки з цифр - вони обидві конвертуються в числа і порівнюються в числовому вигляді.
Ще один оператор порівняння - тернарний оператор ".". Сенс його в тому, що повертається одне зі значень в залежності від умови. У загальному вигляді тернарний оператор записується так:
[Lvalue] = (умова)? вираз, якщо умова істинна. вираз, якщо умова помилкова;
Якщо $ b більше 100 - виведеться "Більше сотні", а якщо менше - 'Менше або дорівнює 100';
Оператори контролю помилок
При виконанні скрипта всі помилки, попередження і зауваження виводяться на екран. Відключити цю опцію можна, змінивши INI-файл PHP, або викликавши спеціальну функцію. Але ці зміни торкнуться відразу всі скрипти на сервері. Для відключення виведення помилок в одному вираженні використовується оператор контролю помилок "@" (собака).
У наступному прикладі, якщо файл 'counter.dat' відсутня, то виконання першого рядка призведе до висновку попередження, а друга - ні.
Оператор придушення помилок дуже корисний при виклику функцій, які можуть видати помилку незалежно від старань програміста. Приклад такої функції - imagecreatefromjpeg (). Це функція відкриває файли формату jpeg, але якщо файли приходять від користувачів, то можуть бути і "битими", а на таких файлах imagecreatefromjpeg () видає помилку.
оператор виконання
Оператор виконання "` `" (зворотні лапки) дозволяє виконувати команди операційної системи і отримувати результат їх виконання. Однак у більшості провайдерів цей оператор відключений і його використання не дасть ніякого результату - повертаються дані будуть завжди порожні.
При запуску на ОС Windows цей скрипт виведе результати роботи утиліти ipconfig. Однак якщо PHP працює в безпечному режимі - скрипт не виведе нічого.
Оператори інкремента і декремента
Оператори інкремента "++" і декремента "-" застосовуються для зміни значення змінної на "1".
TRUE, коли операнд FALSE
На замітку: операція присвоєння дає TRUE якщо привласнення пройшло успішно і присвоєне значення не дорівнює FALSE. Тому наступний код виконується без помилок, але виконується некоректно:
Скрипт завжди буде виводити 'друге значення' при будь-якому значенні $ b, тому що вираз "$ b = 200" завжди істинно. Це дуже поширена помилка, яку досить складно відловити і виправити. Тому при написанні коду треба бути уважним і акуратним.
строкові оператори
Єдиний строковий оператор - оператор конкатенації "." (крапка). Ми вже стикалися з цим оператором раніше. Тут лише додатково відзначимо, що оператор "." досить інтелектуальний і сам коректно виробляє більшість привидів типів. Це дуже зручно, тому що можна запросто одним виразом "склеїти" кілька змінних різного типу.
Оператори масивів
$ A + $ b або $ a and $ b
Об'єднання двох масивів
$ A == $ b або $ a or $ b
TRUE, якщо масиви мають однаковий набір пар "ключ / значення"
TRUE, якщо масиви мають однаковий набір пар "ключ / значення", в однаковому порядку і однаковий типу
TRUE, якщо масиви мають різний набір пар "ключ / значення"
TRUE, якщо масиви мають різний набір пар "ключ / значення", в однаковому порядку і однаковий типу
Оператор об'єднання "+" додає елементи правого операнда до списку елементів лівого операнда. При цьому збігаються пари "ключ / значення» не перезаписувати, а пропускаються.
Детально ми розглянемо оператори роботи з масивами в соответствущего чолі.
Оператор перевірки типу
Єдиний оператор перевірки типу "instanceof" дозволяє перевірити, чи є дана змінна екземпляром того чи іншого класу.
При розгляді класів ми розглянемо цю інструкцію більш докладно.