1. Головна
  2. Колонка автора
  3. Оператори в PHP

Оператори в PHP

Оператором можна описати деяку дію, яку інтерпретатор має зробити із зазначеними змінними. Оператори входять у більшість виразів і дозволяють змінювати чи порівнювати значення змінних.
Оператори в PHP

Об’єднання рядків

Якщо ви вивчали інші мови програмування, знайомі з оператором «+» для об’єднання рядків. Але в PHP справа зовсім інша. Оператор «+» використовується для арифметичних операцій і рядок автоматично приводиться до числового значення, а для поєднання рядків використовується символ крапки «.».
<?php
$number = 123;
echo 'Число: ' . $number; // Число: 123
Аналогічно можна використовувати інтерполяцію змінної:
<?php
$number = 123;
echo "Число: {$number}"; // Число: 123
Крім оператора крапки «.» існує оператор «.=», який призначений для скорочення конструкції конкатенації:
<?php
$number = 123;
$str = 'Число: ';

$result = $str . $number; // Число: 123
$result = $str .= $number; // Число: 123

Конструкція Echo

За допомогою конструкції Echo можна здійснювати вивід у вікно браузера. Конструкція може приймати один або більше параметрів розділених комою, які вона виводить у вікно браузера.
<?php
$number = 123;
echo 'Число: ', $number; // Число: 123
Параметри конструкції Echo можуть поміщатись у необов’язкові круглі дужки, але робити це не рекомендується, оскільки дужки в більшості випадків використовуються для групування, а використовувати виключно лапки.

Часто замість конструкції Echo використовують рядкову функцію Print, яка дозволяє виводити змінні у вікно браузера, але приймає тільки один параметр, тому в ній не можна наводити параметри через кому. Крім того, функція повертає True у разі успішного виведення змінної, інакше повертається False, на відміну від конструкції Echo, яка не повертає нічого.

Арифметичні оператори

Операції над числами проводяться за допомогою арифметичних операторів: «+» - додавання, «*» - множення, «-» - віднімання, «/» - ділення, «%» - ділення за модулем, «**» - зведення в ступінь, «++» – збільшення на одиницю (інкремент), «--» – зменшення на одиницю (декремент).

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

У PHP, якщо при операції ділення одного цілого числа на інше виходить дробове число, результат автоматично приводиться до дійсного типу. Щоб отримати ціле значення, потрібно явно привести результат ділення до цілого типу або з допомогою конструкції (int), або з допомогою функції Intval. Також можна налаштувати кількість цифр після крапки (за замовчуванням 12) до необхідного значення директивою Precision у конфігураційному файлі php.ini.

Крім описаних вище операторів, можна також використовувати «скорочений запис» арифметичних операторів. Тобто вираз $а = $а + $b у скороченій формі запишеться як $а += $b, що означає «привласнити операнду лівої частини суму значень лівого та правого операндів». Аналогічні дії допустимі всім наведеним вище операторам («+=», «*=», «-=», «/=», «%=», «**=», «.=»).

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

Оператори інкременту «++» та декременту «--» поділяють на префіксні «++$var» та постфіксні «$var++». При префіксній операції інкременту збільшення значення операнда на одиницю відбувається до того, як повертається значення. Відповідно, при постфіксній – після.
<?php
// Префіксна форма:
$var = 1;
echo ++$var; // 2
// Постфіксна форма:
$var = 1;
echo $var++; // 1
echo $var; // 2
Як видно з прикладу, при префіксному записі на виході виходить значення 2, оскільки префіксний оператор інкременту спочатку виконує інкрементування, а потім повертає отримане значення. У другому випадку результат рівний одиниці. Операції інкременту та декременту можуть застосовуватися тільки до змінних, тобто запис «++1» є неправильним.

Оператори «++» і «--» застосовуються не тільки до цілісних змінних. Наприклад, можна виконувати операції зі рядковими значеннями:
<?php
$var = 'a';
echo ++$var; // b
Результатом виконання цього коду буде рядок «b», тобто буква «b» є наступною за «a» буквою алфавіту.

Порозрядні оператори

Порозрядні оператори, вони ж бітові оператори, призначені до виконання маніпуляцій над окремими бітами числових значень: «&» - відповідає побітовому «і» (AND); «|» - порозрядне об’єднання «АБО» (OR); «^» - порозрядне виключає «АБО» (XOR); «~» - порозрядне заперечення (NOT); «<<» - зсув вліво бітового уявлення значення лівого цілісного операнда на кількість розрядів, що дорівнює значенню правого цілісного операнда; «>>» - зрушення вправо бітового уявлення значення лівого цілісного операнда на кількість розрядів, що дорівнює значенню правого цілісного операнда.

Операції над бітовими операторами виконуються над числами у двійковому поданні. Наприклад, бітова операція «&» (і) над числами 5 і 6 дасть результат 4:
<?php
echo 5 & 6; // 4
Результат можна легко пояснити, якщо перевести числа 5 і 6 у двійкове уявлення, в якому вони рівні 0101 та 0110 відповідно. Складання розрядів при використанні оператора «&» відбувається згідно з правилами, тобто результат 1 тільки тоді, коли два операнди мають одиницю в стовпці:
0101
0110
0100
Відповідно 0110 у двійковій системі рівне 4 у десятковій системі.

Оператор «|» відповідає побітовому «АБО» (перетин). Застосовуючи операцію «|» до чисел, розглянутих раніше, отримаємо в результаті 7:
<?php
echo 5 | 6; // 7
Перетин розрядів під час використання оператора «|» відбувається згідно з правилами, тобто 1 в результаті лише тоді, коли хоча б один операнд має одиницю в стовпці:
0101
0110
0111
Відповідно 0111 у двійковій системі дорівнює 7 у десятковій системі.

Оператор «^» відповідає побітовому виключає «АБО» (XOR).
<?php
echo 5 ^ 6; // 3
Одиниця при перетині розрядів з використанням оператора «^» отримується в результаті лише тоді, коли один з операндів має одиницю в стовпці, інакше 0:
0101
0110
0011
У двійковій системі 0011 відповідно дорівнює 3 у десятковій системі.

Оператор заперечення «~» є побітовою інверсією та замінює всі 0 на 1 і навпаки.
<?php
echo ~6; // -7
У двійковому еквіваленті:
0110 (6)
1001 (-7)
Усі побітові операції здійснюються над цілими числами, знак у яких кодується першим розрядом: якщо він дорівнює 0, число додатне, якщо він дорівнює 1 - від’ємне. У двійкових числах провідні нулі зазвичай не вказують, але операція «~» здійснює їхнє інвертування - вони замінюються одиницями, приводячи до від’ємних значень. Так, операція -7 у двійковому поданні для 32-бітного числа виглядає так:
00000000000000000000000000000110 (6)
11111111111111111111111111111001 (-7)
Крім цього, бінарне уявлення від’ємних чисел інвертовано щодо позитивних таким чином, щоб їхнє об’єднання за допомогою «&» давало 0.

Оператор «<<» зсуває вліво всі біти першого операнда на число позицій, зазначене у другому операнді. Зсув на від’ємне значення призводить до нульового результату.
<?php
echo 5 << 6; // 320
У двійковому еквіваленті:
000000101 (5)
101000000 (320)
Оператор «>>» зсуває праворуч всі біти першого операнда на число позицій, зазначених у другому операнді. Зсув на від’ємне значення призводить до нульового результату:
<?php
echo 5 >> 1; // 2
У двійковому еквіваленті:
000000101 (5)
000000010 (2)
Як і арифметичні оператори, порозрядні оператори підтримують скорочений запис: «&=», «|=», «^=», «<<=», «>>=».

Оператори порівняння

Оператори порівняння виконують порівнювання заданих значень та повертають True (істина) або False (брехня). Виняток становить лише оператор «<=>», який повертає ціле число. Оператор «<» - оператор «менший», повертає True, якщо змінна, вказана в лівому аргументі, має значення строго менше значення правої змінної. «<=» - оператор «менше або рівне», повертає True, якщо змінна, вказана в лівому аргументі має значення менше або дорівнює правому аргументу. Оператор «>» - «більше», працює аналогічно оператору «<», за винятком зміни сторін аргументів. Оператор рівності «=» та його еквівалент «<>» повертає True, якщо значення змінних по обидва боки рівні. Оператор «!=» нерівності повертає True, якщо значення змінних різні. Оператор еквівалентності «===», повертає True, якщо значення та тип змінних рівні. Оператор нееквівалентності «!===», повертає True, якщо значення, або тип змінних не рівні. Оператор «<=>» у разі рівності змінних повертає 0, якщо лівий аргумент більший за правий повертається позитивне число 1, якщо менше – від’ємне -1.
<?php
echo 2 > 1; // true
echo 2 > 3; // false
echo 2 >= 2; // true
echo 1 < 0; // false
echo 2 < 2; // false
echo 2 <= 2; // true
echo 1 == 0; // false
echo 1 == 1; // true
echo 1 != 0; // true
echo 1 != 1; // false
echo 0 == 'abc'; // true
echo 0 == ''; // true
echo 0 === ''; // false
echo 0 == null; // true
У коментарях до цього прикладу наводяться значення True або False, але реально у вікно браузера виводиться значення 1 для True, або порожній рядок для False. В останньому рядку прикладу видно, що якщо значення 0 порівнюється з Null за допомогою оператора рівності «==», повертається значення істини (true). Однак іноді потрібно перевірити, чи рівне значення змінної порожньому рядку '', 0 або Null. Для вирішення цього завдання призначені оператори еквівалентності «===» та нееквівалентності «!==», вони повертають True тільки в тому випадку, якщо значення операндів точно відповідають один одному.

Описані оператори мають пріоритет виконання, наприклад, операції «==» і «!=» мають нижчий пріоритет порівняно з іншими.

Наведемо таблиці порівняння різних величин за допомогою операторів рівності «==»:
Оператори в PHP
Таблиці порівняння різних величин за допомогою операторів рівності «===»:
Оператори в PHP
Наведемо код, який генерує дані таблиці:
<style type="text/css">
table{padding: 0.5em; overflow: auto; margin:0px; padding:0px; box-shadow: 10px 10px 5px #888888; border:1px solid #000000; -moz-border-radius-bottomleft:0px; -webkit-border-bottom-left-radius:0px; border-bottom-left-radius:0px; -moz-border-radius-bottomright:0px; -webkit-border-bottom-right-radius:0px; border-bottom-right-radius:0px; -moz-border-radius-topright:0px; -webkit-border-top-right-radius:0px; border-top-right-radius:0px; -moz-border-radius-topleft:0px; -webkit-border-top-left-radius:0px; border-top-left-radius:0px; border-collapse:collapse}
table tr:nth-child(odd){background-color:#e6e6e6}
table tr:ntd-child(even){background-color:#ffffff}
table td{Vertically-align: middle; text-align: center; border:1px solid #000000; border-widtd:0px 1px 1px 0px; padding:10px; font-family:Arial}
table td .green{color:white;background-color:green; text-align: center; }
.green{color:white;background-color:green}
</style>
<?php
$arrayValue = array(true, false, 1, 0, '1', '0', '-1', -1, NULL, array(), 'php');
echo '<table>';
foreach ($arrayValue as $key => $valueHorizontally) {
if ($key == 0) {
echo '<tr>';
foreach ($arrayValue as $key => $valueFirstTr) {
echo ($key == 0 ? '<td></td>' : '').'<td class="green">'.var_export($valueFirstTr, true).'</td>';
}
echo '</tr>';
}
echo '<tr>';
foreach ($arrayValue as $key => $valueVertically) {
echo ($key == 0 ? '<td class="green">'.var_export($valueHorizontally, true).'</td>' : '').'<td>'.($valueHorizontally === $valueVertically ? 'true' : 'false').'</td>';
}
echo '</tr>';
}
echo '</table>';

Пріоритет виконання операторів

Наведемо список операторів залежно від пріоритету виконання. Оператори з нижчим пріоритетом розташовані нижче, з вищим - вище. Оператори, розташовані на одному рядку, мають однаковий пріоритет, і виконується насамперед той із операторів, який зустрічається у виразі першим.
clone new
[]
**
++ --~(int) (float) (string) (array) (object) @
instanceof
!
* / %
+ - .
<< >>
< <= > >=
== != === !== <> <=>
&
^
|
&&
||
??
?:
​= += -= *= /= /= %= &= |= ^= <<= >>=
and
xor
or
,
#самовчитель_php
Редакція «КовельPost» може не поділяти думку блогерів або дописувачів. За зміст публікацій і їх достовірність відповідальність несуть автори.

Коментарі

Підписуйтесь на наш канал у Telegram! 🚀

@kovelpost