Php ціла частина від поділу. Операції зі змінними PHP (оператори). Префіксна форма інкременту

Операції зі змінними PHP (оператори)

Для здійснення існують різні групи.

Оператором називається щось, що складається з одного або більше значень (виразів, якщо говорити на жаргоні програмування), яке можна обчислити як нове значення (отже, вся конструкція може розглядатися як вираз). Звідси випливає, що функції або будь-які інші конструкції, які повертають значення (наприклад, print()) є операторами, на відміну від решти мовних конструкцій (наприклад, echo()), які нічого не повертають.

Арифметичні операції у PHP

Пам'ятаєте шкільні засади арифметики? Описані нижче оператори працюють так само.

Операція поділу ("/") завжди повертає речовий тип, навіть якщо обидва значення були цілими (або рядками, які перетворюються на цілі числа). Інакше результат буде дрібним.

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

Можливе використання дужок. Пріоритет одних математичних операцій над іншими та зміна пріоритетів при використанні дужок в арифметичних виразах відповідають звичайним математичним правилам.

Операції інкременту та декременту

PHP, аналогічно C, підтримує префіксні та постфіксні оператори інкременту та декременту.

Постфіксні оператори інкременту та декременту

Як і в мові Сі, ці оператори збільшують або зменшують значення змінної, а у вираженні повертають значення змінної $aдо зміни. Наприклад:

$a=10;
$b=$a++;
echo "a=$a, b=$b"; // Виводить a = 11, b = 10

Як бачите, спочатку змінною $bпривласнилося значення змінної $a, А вже потім остання була інкрементована. Втім, вираз, значення якого надається змінною $b, може бути й складніше - у будь-якому випадку інкремент $aвідбудеться лише після його обчислення.

Префіксні оператори інкременту та декременту

Існують також оператори інкременту та декременту, які вказуються, а не після імені змінної. Відповідно, і вони повертають значення змінної вже після зміни. Приклад:

$a=10;
$b=--$a;
echo "a=$a, b=$b"; // Виводить a = 9, b = 9

Операції інкременту та декременту на практиці застосовуються дуже часто. Наприклад, вони зустрічаються практично у будь-якому циклі for .

echo "

Постфіксний інкремент

" ;
$a = 5;
echo "Має бути 5: " . $a++. "
\n" ;

\n" ;

Echo "

Префіксний інкремент

" ;
$a = 5;
echo "Має бути 6: " . ++ $a. "
\n" ;
echo "Має бути 6: " . $a. "
\n" ;

Echo "

Постфіксний декремент

" ;
$a = 5;
echo "Має бути 5: " . $a - . "
\n" ;

\n" ;

Echo "

Префіксний декремент

" ;
$a = 5;
echo "Має бути 4: " . - $a. "
\n" ;
echo "Має бути 4: " . $a. "
\n" ;
?>

Строкові операції

У PHP є два оператори для роботи з рядками. Перший - оператор конкатенації ("."), який повертає об'єднання лівого та правого аргументу. Другий – оператор присвоєння з конкатенацією, який приєднує правий аргумент до лівого. Наведемо конкретний приклад:

$a = "Hello";
$b = $a. "World!" ; // $b містить рядок "Hello World!"

$a = "Hello";
$a .= "World!" ; // $a містить рядок "Hello World!"
?>

Побітові операції

Ці операції призначені для роботи (установки/зняття/перевірки) груп бітів у цілій змінній. Біти цілого числа - це не що інше, як окремі розряди того самого числа, записаного в двійковій системічислення. Наприклад, у двійковій системі число 12 виглядатиме як 1100, а 2 - як 10, так що вираз 12|2 поверне нам число 14 (1110 у двійковому записі). Якщо змінна не ціла, вона вна-
чале округляється, а потім до неї застосовуються наведені нижче оператори.

Для представлення одного числа використовуються 32 біти:

  • 0000 0000 0000 0000 0000 0000 0000 0000 – це нуль;
  • 0000 0000 0000 0000 0000 0000 0000 0001 – це 1;
  • 0000 0000 0000 0000 0000 0000 0000 0010 – це 2;
  • 0000 0000 0000 0000 0000 0000 0000 0011 – це 3;
  • 0000 0000 0000 0000 0000 0000 0000 0100 – це 4;
  • 0000 0000 0000 0000 0000 0000 0000 0101 – це 5;
  • 0000 0000 0000 0000 0000 0000 0000 1111 – це 15;

Побітові оператори:

Приклад Назва Результат
$a & $b Побітове "і" Встановлюються тільки ті біти, які встановлені і $a, і $b.
$a | $b Побітове "або" Встановлюються ті біти, які встановлені або $a, або $b.
$a ^ $b Виключне або Встановлюються тільки ті біти, які встановлені або тільки $a, або тільки $b
~ $a Заперечення Встановлюються ті біти, які $a не встановлені, і навпаки.
$a<< $b Зрушення вліво Усі біти змінної $a зсуваються на $b позицій вліво (кожна позиція має на увазі "множення на 2")
$a >> $b Зсув праворуч Усі біти змінної $a зсуваються на $b позицій вправо (кожна позиція має на увазі "розподіл на 2")

Операції порівняння

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

Це у своєму роді унікальні операції, тому що незалежно від типів своїх аргументів вони завжди повертають одне із двох: falseабо true. Операції порівняння дозволяють порівнювати два значення між собою і, якщо умова виконана, повертають true, А якщо немає - false.

У PHP дозволяється порівнювати лише скалярні змінні. Масиви та об'єкти в PHP порівнювати не можна. Їх навіть не можна порівнювати на рівність (за допомогою оператора ==), але за виконання такої операції PHP не видає попередження. Так що здивувавшись якось, чому два абсолютно різні масиви при порівнянні їх за допомогою == виявляються раптом однаковими, згадайте, що перед порівнянням обидва операнди перетворюються на слово array, Яке потім і порівнюється.

Детально про порівняння масивів дивіться.

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

Приклад Назва Результат
$a == $b Рівно TRUEякщо $a дорівнює $b.
$a === $b Тотожно TRUEякщо $a дорівнює $b і має той самий тип. (Додано в PHP 4)
$a != $b Не дорівнює TRUEякщо $a не дорівнює $b.
$a<>$b Не дорівнює TRUEякщо $a не дорівнює $b.
$a !== $b Тотожно не одно TRUEякщо $a не дорівнює $b або у випадку, якщо вони різних типів(Додано в PHP 4)
$a< $b Менше TRUEякщо $a строго менше $b.
$a > $b Більше TRUEякщо $a строго більше за $b.
$a<= $b Менше або дорівнює TRUEякщо $a is менше або дорівнює $b.
$a >= $b Більше чи рівно TRUEякщо $a більше або дорівнює $b.

Логічні операції

Логічні оператори призначені виключно для роботи з логічними висловлюваннями та також повертають falseабо true.

Наведемо таблицю логічних операторів PHP:

Слід зазначити, що обчислення логічних виразів, що містять такі оператори, завжди йде зліва направо, при цьому, якщо результат вже очевидний (наприклад, false&&щосьзавжди дає false), то обчислення обриваються, навіть якщо у виразі є виклики функцій. Наприклад, оператор $logic = 0&&(time()>100); стандартна функція time()ніколи не буде викликано.

Будьте обережні з логічними операціями- не забувайте про подвоювання символу. Зверніть увагу, що, наприклад, | і || - два абсолютно різні оператори, один з яких може потенційно повертати будь-яке число, а другий - тільки falseі true.

Оператори інкременту (++) та декременту (--) не працюють з логічними змінними.

Оператори еквівалентності

У PHP, починаючи з PHP4, є оператор тотожного порівняння - потрійний знак рівності === ,
або оператор перевірки на. PHP досить терпимо відноситься до того, що рядки неявно перетворюються на числа, і навпаки.
Наприклад, наступний код виведе, що значення змінних дорівнюють:

$a=10;
$b="10";

І це незважаючи на те, що змінна $aє числом, а $b- Рядок. Тепер розглянемо дещо інший приклад:

$a=0; // Нуль
$b=""; // порожня стрічка
if($a==$b) echo "a та b рівні"; // Виводить "a та b рівні"

Хоча $aі $bявно не рівні навіть у звичайному розумінні цього слова, скрипт заявить, що вони збігаються. Чому так відбувається? Справа в тому, що якщо один із операндів логічного оператораможе трактуватися як число, то обидва операнди трактуються як числа. При цьому порожній рядок перетворюється на 0 який потім і порівнюється з нулем. Не дивно, що оператор echoспрацьовує.
Проблему вирішує оператор еквівалентності === (Потрійна рівність). Він лише порівнює два висловлювання, але й їхні типи. Перепишемо наш приклад із використанням цього оператора.

У PHP доступні всі основні математичні операції. Як операнди можна використовувати як цілі, так і речові числа.

У таблиці наведено список арифметичних операторів :
ОператорЗнакОпис
Додавання + Додавання двох значень
Віднімання - Віднімання одного значення з іншого
Розмноження * Перемноження двох значень
Поділ / Розподіл одного значення на інше
Отримання залишку від розподілу % Поділ одного значення на інше та повернення залишку (розподіл по модулю)
Інкремент ++ Скорочений запис збільшення числа на одиницю
Декремент -- Скорочений запис зменшення числа на одиницю
Унарне заперечення - Перетворення позитивного числа на негативне або негативного на позитивне

Оператори віднімання, множення, поділу, поділу за модулем та складання

Оператори віднімання, множення, розподілу, розподілу за модулем і складання використовується так само, як і в математиці. Тут варто приділити увагу операторам поділу та поділу за модулем.

Оператор поділу ("/") повертає число з плаваючою точкою, крім випадку, коли обидва значення є цілими числами (або рядками, що перетворюються на цілі числа), які діляться націло - у цьому випадку повертається ціле значення.

result2 = $result2
"; echo "result3 = $result3
result4 = $result4"; ?>

При розподілі по модулю операнди перетворюються на цілі числа (з видаленням дробової частини) на початок операції. Результат операції залишку від розподілу % матиме той самий знак, що й ділене:

Унарне заперечення

Оператор унарного заперечення позначається знаком "-", він змінює значення свого єдиного операнда на протилежне:

В даному випадку круглі дужки не потрібні, тому що унарне заперечення має найвищий пріоритет, але вони допомагають організувати код таким чином, щоб було зрозуміло, що має місце складання чисел -5 та 4.

Інкремент

Оператор інкременту, позначається знаком + і може бути розташований з будь-якої сторони від операнда, з яким він працює. Він збільшує це значення на одиницю, так само, як при додаванні одиниці до значення. Фактичний результат залежить від того, де був застосований оператор до або після операнда, з яким він застосовувався. Цей оператор часто використовується зі змінними, і це часто відбувається всередині циклів (про цикли буде розказано далі).

Префіксна форма інкременту

Префіксна форма- це коли оператор інкременту розташований перед операндом, така форма запису означає те, що інкремент буде виконаний першим: він збільшує значення операнда на одиницю і тільки потім вже виконується решта інструкції:

Постфіксна форма інкременту

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

Декремент

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

Програмісти, яким потрібно здійснювати відповідальні числові, наукові чи статистичні обчислення, навряд чи стануть розглядати мову складання сценаріїв для Інтернету як прийнятного кандидата на цю роль. Але, незважаючи на сказане, мова PHP пропонує чудовий набір функцій, які повністю забезпечують вирішення більшості математичних завдань, що виникають у процесі виконання сценаріїв для Інтернету. Крім того, мова PHP надає деякі розширені можливості, такі як арифметика чисел довільної точності, а також засоби бібліотек хешування та криптографічних бібліотек.

Розробники мови PHP прийняли цілком обґрунтований підхід і не робили жодних спроб знову винаходити колеса, призначені для зазначеної мети. Справа в тому, що багато з найбільш фундаментальних математичних функцій, які застосовуються в мові PHP, є просто оболонками навколо аналогів цих функцій мовою C.

Математичні операції

Більшість математичних дій у мові PHP здійснюється у формі вбудованих функцій, а не у формі операцій. Крім операцій порівняння, мова PHP пропонує п'ять операцій виконання простих арифметичних дій, а також деякі скорочені операції, що дозволяють складати більш короткі вирази інкременту та декременту, а також привласнення.

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

До п'яти основних арифметичних операцій відносяться ті операції, які зазвичай реалізовані в будь-якому чотирифункціональному калькуляторі, а також операція поділу за модулем (%). Короткий опис арифметичних операцій наведено у таблиці:

Арифметичні операції
Операція Опис
+ Повертає суму значень двох своїх операндів
- Якщо є два операнда, то значення правого операнда віднімається від значення лівого. Якщо є тільки правий операнд, то операція повертає значення цього операнда зі зворотним знаком
* Повертає твір значень двох своїх операндів
/ Повертає результат поділу з плаваючою точкою значення лівого операнда на значення правого операнда
% Повертає залишок від цілого розподілу значення лівого операнда на абсолютне значення правого операнда

При використанні у програмі перших трьох описаних вище арифметичних операцій (+,-,*) слід враховувати, що при виконанні цих операцій відбувається поширення типу від значень з плаваючою точкою подвійної точності до цілісних значень. Під цим мається на увазі наступне: якщо обидва операнди операції є цілими числами, то результатом стає ціле число, а якщо хоча б один з операндів є числом з плаваючою точкою подвійної точності, то результатом стає число з плаваючою точкою подвійної точності. Такого ж поширення типу відбувається і при виконанні операції поділу; крім того, виникає такий додатковий ефект, що результат стає числом з плаваючою точкою подвійної точності, якщо розподіл не здійснюється без залишку (націло).

Операція поділу за модулем (%) у мові PHP приймає цілі операнди, а якщо ця операція застосовується до числа з плаваючою точкою подвійної точності, то ці числа попередньо перетворюються на цілі числа (шляхом відкидання дробової частини). Результатом такої операції є ціле число.

Операції інкременту та декременту

Значна частина синтаксису мови PHP успадкована від мови C, а програмісти C славляться любов'ю до стислості і пишаються цим. Операції інкременту та декременту, взяті з мови C, дозволяють більш коротко представляти вирази типу $count = $count + 1, які зазвичай зустрічаються в програмах досить часто.

Операція інкременту (++) застосовується для додавання одиниці до значення тієї змінної, яку поширюється ця операція, а операція декремента (--) віднімає одиницю від значення такий змінної.

Кожна з цих двох операцій має два різновиди - суфіксну(у цій формі знак операції поміщається безпосередньо за змінною, яку поширюється операція) і префіксну(у цій формі знак операції поміщається безпосередньо перед змінною, яку поширюється операція). Обидва різновиди мають той самий побічний ефект, пов'язаний зі зміною значення змінної, але суфіксні та префіксні операції повертають різні значення при використанні як вирази. Суфіксна операція діє так, що значення змінної змінюється після повернення значення виразу, а префіксна операція діє таким чином, що спочатку змінюється значення, а потім змінною повертається нове значення. Зазначену різницю можна виявити, використовуючи операції декременту та інкременту в операторах присвоєння:

Код PHP $ count = 0; $result = $count++; echo "Результат інкременту $count++: ".$result."
$count = 0; $result = ++$count; echo "Результат інкременту ++$count: ".$result."
";

Наведені оператори формують наступний висновок у вікні браузера:

Операції інкременту

У цьому прикладі оператор $result = $count++ повністю еквівалентний операторам:

Код PHP $result = $count; $ count = $ count + 1;

Поряд з цим оператор $result = ++$count еквівалентний таким операторам:

Код PHP $ count = $ count +1; $result = $count;

Операції привласнення

Операції інкременту (і декременту) дозволяють зменшити обсяг коду, необхідного для додавання одиниці до значення змінної, але не дозволяють скоротити обсяг коду, в якому змінної присвоюється результат додавання її значення з іншим числом або результат виконання інших арифметичних дій. На щастя, всі п'ять арифметичних операцій мають відповідні їм операції присвоєння (+=, -=, *=, /= і %=), що дозволяють присвоїти змінної в одному короткому вираженні результат виконання арифметичної операції над значенням цієї змінної. Наприклад, оператор

Код PHP $count = $count *3;

може бути скорочено представлений таким

Код PHP $count *=3;

Прості математичні функції

Наступний етап ускладнення програми порівняно з тією, у якій застосовуються лише арифметичні операції, полягає у використанні різноманітних функцій. Функції дозволяють виконувати такі завдання, як перетворення з одного числового типу в інший (див. статтю "Типи даних") та пошук мінімального чи максимального числа у множині чисел. У наступній таблиці представлені прості математичні функції:

Прості математичні функції PHP
Функція Опис
floor() Приймає єдиний фактичний параметр (як правило, число з плаваючою точкою подвійної точності) і повертає найбільше ціле число, яке менше або дорівнює цьому фактичному параметру (округлення в меншу сторону)
ceil() Ім'я цієї функції є скороченням від слова ceiling (стеля). Функція приймає єдиний фактичний параметр (як правило, число з плаваючою точкою подвійної точності) і повертає найменше ціле число, яке більше або дорівнює цьому фактичному параметру (округлення у більшу сторону)
round() Приймає єдиний фактичний параметр (зазвичай число з плаваючою точкою подвійної точності) і повертає найближче ціле число
abs() Модуль числа. Якщо числовий фактичний параметр має негативне значення, то функція повертає відповідне позитивне число; якщо фактичний параметр є позитивним, то функція повертає сам фактичний параметр
min() Приймає будь-яку кількість числових фактичних параметрів (але не менше одного) та повертає найменше зі всіх значень фактичних параметрів
max() Приймає будь-яку кількість числових фактичних параметрів (але не менше одного) та повертає найбільше зі всіх значень фактичних параметрів

Наприклад, результат наступного виразу дорівнює 3, оскільки значення кожного виразу з викликом функції також дорівнює 3:

Код PHP $result = min(3, abs(-3), max(round(2.7), ceil(2.3), floor(3.9)));

Вироблення випадкових чисел

У мові PHP застосовуються два генератори випадкових чисел (викликаних відповідно за допомогою функцій rand()і mt_rand()). З кожним із цих генераторів пов'язані по три функції однакового призначення: функція завдання початкового значення ( srand()і mt_srand()), сама функція отримання випадкового числа та функція, що здійснює вибірку найбільшого цілого числа, яке може бути повернене генератором (( getrandmax()і mt_getrandmax())). Функції getrandmax() та mt_getrandmax() повертають значення найбільшого числа, яке може бути повернене функцією rand() або mt_rand(), на платформах Windows це значення обмежено величиною 32768.

Вибір конкретної функції вироблення псевдовипадкових чисел, яка використовується у функції rand(), може залежати від того, з якими бібліотеками був відкомпільований інтерпретатор PHP. На відміну від цього в генераторі mt_rand() завжди використовується та сама функція вироблення псевдовипадкових чисел (mt - скорочення від Mersenne Twister), причому автор оперативної документації до функції mt_rand() стверджує, що ця функція до того ж є більш швидкодією і " більш випадковою" (з погляду криптографії), ніж rand(). У нас немає підстав сумніватися в істинності цих тверджень, тому ми вважаємо за краще використовувати функцію mt_rand(), а не rand().

При використанні деяких версій PHP для деяких платформ створюється враження, що функції rand() і mt_rand() виробляють здавалося б цілком прийнятні випадкові числа, навіть без попереднього завдання початкового значення. Але такому враженню не слід довіряти. По-перше, програми, у яких використовуються функції вироблення випадкових чисел без завдання початкового значення, неможливо легко переносити інші платформи, а, по-друге, надійна робота зазначених функцій без завдання початкового значення гарантується.

Типовий спосіб завдання початкового значення для будь-якого з генераторів випадкових чисел PHP (з використанням функції mt_srand() або srand()) полягає в наступному:

Код PHP mt_srand((double)microtime()*1000000);

У цьому операторі задається початкове значення генератора, що дорівнює кількості мікросекунд, що закінчилися до цього часу з відліку останньої цілої секунди. (Приведення типу до типу double у цьому операторі дійсно необхідно, оскільки функція microtime() повертає рядок, який розглядається як ціле число в операції множення, але не в операції передачі параметрів у функцію.) Рекомендуємо читачеві вводити вказаний оператор завдання початкового значення, навіть якщо йому не зовсім зрозуміло призначення цього оператора; досить просто помістити даний операторна кожну сторінку PHP, лише один раз, перед використанням відповідної функції mt_rand() або rand(), і цей оператор гарантуватиме, що відправна точка зміниться і тому щоразу будуть вироблятися різні випадкові послідовності.

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

Очевидно, що зазначені функції вироблення псевдовипадкових чисел повертають тільки цілі числа, але випадкове ціле число із заданого діапазону можна легко перетворити у відповідне число з плаваючою точкою (скажімо, число з діапазону від 0.0 до 1.0 включно) за допомогою виразу на кшталт rand() / getrandmax(). Після цього вказаний діапазон можна масштабувати та зрушувати при необхідності. Нижче наведено приклад:

Код PHP // Припустимо, нам потрібно згенерувати випадкове число від 100.0 до 120.0 $random = 100.0 + 20.0 * mt_rand() / mt_getrandmax(); echo $random."
// Вироблення цілих чисел (100 - 120); echo round ($ random);

Спробуйте оновити сторінку з цим кодом кілька разів, щоб переконатись у генерації випадкових чисел.

Математичні константи

У PHP версії 4.0 існувала лише одна математична константа, описана в документації - M_PI (значення числа π, представлене у вигляді числа з плаваючою точкою подвійної точності). А починаючи з версії PHP 4.0.2 було запроваджено багато нових констант. Більшість цих нових констант належали до π (або до кратних йому значень), до e (або до кратних йому значень), а також до квадратного коріння; крім того, деякі константи належали до інших типів. Але в наступних випусках з низки причин список констант знову скоротився до порівняно невеликої кількості заданих математичних констант:

Математичні константи PHP
Константа Опис
M_PI π
M_PI_2 π/2
M_PI_4 π/4
M_1_PI 1/π
M_2_PI 2/π
M_2_SQRTPI 2 / sqrt(π)
M_E e
M_SQRT2 sqrt(2)
M_SQRT1_2 1 / sqrt(2)
M_LOG2E log 2 (e)
M_LOG10E lg(e)
M_LN2 log e (2)
M_LN10 log e (10)

Перевірка формату чисел

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

Перша та найпростіша перевірка полягає у використанні функції is_numeric(). Як і при здійсненні більшості інших таких перевірок, функція is_numeric повертає булев результат - true, якщо переданий їй параметр являє собою числові дані будь-якого типу (зі знаком або без знака, цілі чи з плаваючою точкою) або математичне вираз, яке повертає допустиме числове значення.

За допомогою функцій is_int()і is_floatможна визначити, чи є число цілим або дробовим. Ще дві перевірки є трохи складнішими: функції is_finite()і is_infinite()дозволяють виконати саме ті перевірки, на які вказують їх імена (чи число кінцевим або нескінченним). Але, строго кажучи, діапазон значень, на які поширюються ці функції, не може включати актуальної нескінченності (і чи може взагалі бути перевірено, чи числу нескінченно велике значення?). Натомість використовуються межі діапазону значень з плаваючою точкою, допустимі в конкретній системі.

Нижче наведено приклад використання цих функцій:

Код PHP is_numeric(4); // true is_numeric(25 - 6); // true is_numeric("25"); // true is_numeric("25 - 6"); // false is_int(4); // true is_int(4.2); // false is_int("4"); // false - дана перевіркасуворіше, ніж перевірка з допомогою функції is_numeric() is_float(4); // false is_float (4.0); // true is_float(M_PI); // true

Перетворення систем числення

За замовчуванням у мові PHP для прямого та зворотного перетворення числових значень із зовнішнього уявлення у внутрішнє застосовується основа системи числення 10. Крім того, можна повідомити інтерпретатору PHP, що у зовнішньому уявленні використовуються вісімкові числа, задані на підставі 8 (для цього перед числом необхідно ввести провідний 0), або шістнадцяткові числа, задані на підставі 16 (для цього перед числом необхідно ввести префікс 0x).

Безумовно, після перетворення чисел із зовнішнього уявлення у внутрішнє вони зберігаються у пам'яті у двійковому форматі, проте основні арифметичні і математичні обчислення здійснюються у самій операційній системі 2. Крім того, в мові PHP передбачено ряд функцій для перетворення чисел з однієї основи системи числення в інше. Загальні відомостіпро ці функції наведено в таблиці нижче:

Функції перетворення систем числення
Функція Опис
BinDec() Приймає єдиний рядковий параметр, що являє собою двійкове ціле число (число на підставі 2), і повертає рядкове представлення цього числа на основі системи числення 10
DecBin() Аналогічна BinDec(), але перетворює з основи системи числення 10 в основу системи числення 2
OctDec() Аналогічна BinDec(), але перетворює з основи системи числення 8 в основу системи числення 10
DecOct() Аналогічна BinDec(), але перетворює з основи обчислення 10 в основу системи числення 8
HexDec() Аналогічна BinDec(), але перетворює з основи системи числення 16 в основу системи числення 10
DecHex() Аналогічна BinDec(), але перетворює з основи системи числення 10 в основу системи числення 16
base_convert() Приймає рядковий параметр (що представляє ціле число, яке підлягає перетворенню) і два цілих параметри (вихідна та бажана основа). Повертає рядок, що становить перетворене число. У цьому рядку цифри старші 9 (від 10 до 35) представлені символами a-z. І вихідне, і бажані підстави повинні бути в межах 2-36

Усі функції перетворення систем числення є функціями спеціального призначення, що перетворюють числа з однієї конкретної основи на іншу. Винятком є ​​функція base_convert(), яка приймає довільні параметри з позначенням початкової та результуючої основи.

Зверніть увагу на те, що всі функції перетворення систем числення приймають рядкові параметри та повертають строкові значення, але можна використовувати десяткові числові параметри та покладатися на правильне виконання типу інтерпретатором PHP. Іншими словами, варіанти виклику DecBin("1234") та DecBin(1234) призводять до отримання однакового результату.

Експоненти та логарифми

Мова PHP включає стандартні експоненційні та логарифмічні функції двох різновдностей - для роботи з основи 10 та основи е (які наведені в таблиці).

У мові PHP передбачена функція exp() для зведення числа e у вказаний ступінь, але відсутня функція з одним параметром, за допомогою якої можна було б звести у вказаний ступінь число 10. Однак замість цієї функції можна використовувати функцію pow() з двома параметрами, задаючи 10 як перший параметр.

Можна переконатися в тому, що експоненційні та логарифмічні функції з тією самою підставою є зворотними по відношенню один до одного, провівши перевірку ідентичності отриманих результатів таким чином:

Код PHP $ test_449 = 449.0; $ test_449 = pow (10, exp (log (log10 ($ test_449))))); echo "test_449 = $ test_449"; // test_449 = 449

Тригонометричні функції

У мові PHP передбачений стандартний набір основних тригонометричних функцій, загальні відомості про які наведені в таблиці:

Тригонометричні функції
Функція Опис
pi() Не приймає параметрів та повертає наближене значення числа π (3.1415926535898). Може використовуватись як взаємозамінна з константою M_PI
sin() Приймає числовий параметр у радіанах та повертає синус параметра у вигляді числа з плаваючою точкою подвійної точності
cos() Приймає числовий параметр у радіанах та повертає косинус параметра у вигляді числа з плаваючою точкою подвійної точності
tan() Приймає числовий параметр у радіанах та повертає тангенс параметра у вигляді числа з плаваючою точкою подвійної точності
asin() Приймає числовий параметр та повертає арксинус параметра у радіанах. Вхідні дані повинні знаходитися в межах від -1 до 1 (отримання функцією вхідних даних, що виходять за межі діапазону, призводить до отримання результату NAN). Результати знаходяться в діапазоні від -π/2 до π/2
acos() Приймає числовий параметр та повертає арккосинус параметра в радіанах. Вхідні дані повинні знаходитися в межах від -1 до 1 (отримання функцією вхідних даних, що виходять за межі цього діапазону, призводить до отримання NAN. Результати знаходяться в діапазоні від 0 до π
atan() Приймає числовий параметр та повертає арктангенс параметра у радіанах. Результати знаходяться в діапазоні від -π/2 до π/2

Нижче показаний приклад складання таблиці обчислення тригонометричних функцій для "стандартних" кутів:

Код PHP function display_trigonometry($func_array, $input_array) ( // Заголовок функції echo " ";) echo "// Вивести решту таблиці foreach($input_array as $input) ( echo " "; foreach($func_array as $func) ( echo " ";) echo "";) echo "
Значення/функція$func
".sprintf("%.4f",$input).""; printf("%4.4f", $func($input)); echo "
"; ) display_trigonometry(array("sin", "cos", "tan"), array(0, M_PI/6, M_PI/3, M_PI/2, M_PI));

Приклад використання тригонометричних функцій у PHP

Отримання дуже великих (але не нескінченних) значень тангенсу обумовлено тим, що теоретично знаменники повинні бути рівними нулю, але насправді трохи відрізняються від нуля через помилки заокруглення.

Обчислення з довільною точністю (з використанням функцій BC)

Цілочисленні типи та типи з плаваючою точкою подвійної точності повністю підходять для вирішення більшості математичних завдань, що виникають при виконанні сценаріїв для Інтернету, але для зберігання кожного екземпляра значення, представленого за допомогою цих типів, передбачено фіксований обсяг комп'ютерної пам'яті, тому на розміри та точність представлення чисел цих типів неминуче накладаються обмеження.

Безумовно, точні діапазони значень цих типів можуть залежати від архітектури серверного комп'ютера, але значення цілих чисел зазвичай можуть знаходитися в межах від -2 31 -1 до 2 31 -1, а числа з плаваючою точкою подвійної точності можуть представляти числа з точністю приблизно від 13 до 14 десяткових цифр. З іншого боку, для вирішення завдань, що вимагають використання ширшого діапазону подання або більшої точності, у мові PHP передбачені математичні функції з довільною точністю(звані також функціями BC - на ім'я обчислювальної утиліти з довільною точністю, заснованої на засобах системи Unix).

Може виявитися, що функції довільної точності не включені в компіляцію інтерпретатора PHP, особливо якщо користувач проводив таку компіляцію самостійно, оскільки для цього користувач повинен був знати, що на етапі налаштування конфігурації необхідно включити до складу параметрів прапорець --enable-bcmath. Щоб перевірити, чи доступ до зазначених функцій, спробуйте обчислити вираз bcadd("1","1"). Якщо буде отримано повідомлення про помилку, в якому йдеться про невизначену функцію, вам потрібно буде знову налаштувати конфігурацію і перекомпілювати інтерпретатор PHP.

У функціях BC як параметри і значення, що повертаються, використовуються не числові типи з поданням фіксованої довжини, а рядки. Оскільки в мові PHP довжина рядків обмежується лише об'ємом доступної пам'яті, числа, які використовуються в розрахунках, можуть мати будь-яку довжину. Основні обчислення здійснюються у десятковому вигляді та багато в чому нагадують ті, які може виконати і людина за допомогою олівця та паперу (якщо зможе діяти дуже швидко та запасеться терпінням). Функції BC, що оперують цілими числами, діють точно і дозволяють використовувати стільки цифр, скільки потрібно, а у функціях, що оперують числами з плаваючою точкою, обчислення виконуються з точністю до заданої кількості десяткових розрядів. Загальні відомості про функції BC наведено у таблиці нижче:

Математичні функції із довільною точністю (функції BC)
Функція Опис
bcadd() Приймає два рядкові параметри, що представляють числа, та необов'язковий цілісний параметр із позначенням масштабного множника. Повертає суму перших двох параметрів у вигляді рядка, з кількістю десяткових позицій у результаті, що визначається параметром з позначенням масштабного множника. Якщо параметр із позначенням масштабного множника не заданий, то використовується заданий за замовчуванням масштабний множник
bcsub() Аналогічна bcadd(), за винятком того, що повертає результат віднімання другого параметра від першого
bcmui() Аналогічна bcadd(), крім того, що повертає результат множення своїх параметрів
bcdiv() Аналогічна bcadd(), крім того, що повертає результат поділу першого параметра на другий
bcmod() Повертає модуль (залишок) від розподілу першого параметра на другий. Оскільки значення, що повертається, відноситься до цілого типу, функція не приймає параметр з позначенням масштабного множника
bcpow() Зводить перший параметр у ступінь, вказаний другим параметром. Кількість десяткових позицій у результаті визначається масштабним множником, якщо він заданий
bcsqrt() Повертає квадратний корінь параметра з кількістю десяткових позицій, що визначається значенням необов'язкового масштабного множника
bcscale() Встановлює за замовчуванням масштабний множник для подальших викликів функції BC

Більшість з цих функцій приймають як останній параметр необов'язковий масштабний множник (ціле число), який визначає, яка кількість десяткових позиції має бути в результаті. Якщо такий параметр не заданий, то масштабним множником використовується заданий за замовчуванням масштабний множник, який, у свою чергу, може бути встановлений шляхом виклику функції bcscale(). Задана за замовчуванням величина для цього заданого за замовчуванням значення (тобто величина, яка використовується, якщо сценарій не застосовує виклик функції bcscale()) може бути також задана у файлі ініціалізації php.ini.

Нижче наведено приклад використання функції з довільною точністю для точного виконання цілих арифметичних операцій. Виконання наступного коду:

Код PHP for ($x = 1; $x< 25; $x++) { echo "$x$x= ".bcpow($x, $x)."
"; }
Точне обчислення астрономічних величин за допомогою функцій BC

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

Масиви Обробка форм 1 2 3 4 5 6 7 8 9 10

Останнє оновлення: 1.11.2015

У PHP ми можемо використовувати різні оператори: арифметичні, логічні та ін. Розглянемо кожен тип операцій.

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

    + (операція додавання)

    Наприклад, $a + 5

    - (Операція віднімання)

    Наприклад, $a - 5

    * (множення)

    Наприклад, $a * 5

    / (Поділ)

    Наприклад, $a / 5

    % (отримання залишку від розподілу)

    Наприклад: $a = 12; echo $a %5; // одно 2

    ++ (інкремент/ збільшення значення на одиницю)

    Наприклад, ++$a

    Важливо розуміти різницю між виразами ++$a та $a++. Наприклад:

    $a=12; $b=++$a; // $b і 13 echo $b;

    Тут спочатку до значення змінної $a додається одиниця, а потім її значення дорівнює змінній $b. Інакше було б, якби вираз виглядав так: $b=$a++; . Тут спочатку значення змінної $a прирівнювалося змінної $b, а потім відбувалося збільшення значення змінної $a.

    -- (декремент/зменшення значення на одиницю)

    Наприклад, --$a . І, як і у випадку з інкрементом, існують два види запису: --$a і $a--

Операції привласнення

    Прирівнює до змінної певне значення: $a = 5

    Додавання з наступним присвоєнням результату. Наприклад: $a = 12; $a += 5; echo $a; // одно 17

    Віднімання з наступним присвоєнням результату. Наприклад: $a = 12; $a -= 5; echo $a; // одно 7

    Розмноження з наступним присвоєнням результату: $a=12; $a *= 5; echo $a; // одно 60

    Поділ із наступним присвоєнням результату: $ a = 12; $a /= 5; echo $a; // І 2.4

    Об'єднання рядків із присвоєнням результату. Застосовується до двох рядків. Якщо змінні зберігають не рядки, а, наприклад, числа, їх значення перетворюються на рядки і потім проводиться операція: $a=12; $a.=5; echo $a; // одно 125 // ідентично $b="12"; $b .="5"; // одно 125

    Отримання залишку від розподілу з наступним присвоєнням результату: $ a = 12; $a %= 5; echo $a; // одно 2

Операції порівняння

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

    Оператор рівності порівнює два значення, і якщо вони рівні, повертає true, інакше повертає false: $a == 5

    Оператор тотожності також порівнює два значення, і якщо вони рівні, повертає true, інакше повертає false: $a === 5

    Порівнює два значення і якщо вони не рівні, повертає true, інакше повертає false: $a != 5

    Порівнює два значення і якщо вони не рівні, повертає true, інакше повертає false: $a !== 5

    Порівнює два значення, і якщо перше більше за друге, то повертає true, інакше повертає false: $a > 5

    Порівнює два значення, і якщо перше менше за друге, то повертає true, інакше повертає false: $a< 5

    Порівнює два значення, і якщо перше більше або дорівнює другому, то повертає true, інакше повертає false: $a >= 5

    Порівнює два значення, і якщо перше менше або дорівнює другому, то повертає true, інакше повертає false: $a<= 5

Оператор рівності та тотожності

Обидва оператори порівнюють два вирази та повертають true, якщо вирази рівні. Але між ними є різницю. Якщо операції рівності приймають два значення різних типів, всі вони наводяться одному - тому, який інтерпретатор знайде оптимальним. Наприклад:

Вочевидь, що змінні зберігають різні значення різних типів. Але при порівнянні вони будуть приводиться до одного типу – числового. І змінна $a буде приведена до 22. І в результаті обидві змінні виявляться рівні.

Або, наприклад, наступні змінні також дорівнюватимуть:

$a = false; $ b = 0;

Щоб уникнути подібних ситуацій використовується операція еквівалентності, яка враховує як значення, а й тип змінної:

$a = "22a"; $ b = 22; if($a===$b) echo "рівні"; else echo "не рівні";

Тепер змінні будуть рівними.

Аналогічно працюють оператори нерівності!= і!==.

Логічні операції

Логічні операції зазвичай використовуються для поєднання результатів двох операцій порівняння. Наприклад, нам треба виконати певну дію, якщо істинні будуть кілька умов. Є такі логічні операції:

    Повертає true, якщо обидві операції порівняння повертають true, інакше повертає false: $a == 5 && $b = 6

    Аналогічно операції && : $a == 5 and $b > 6

    Повертає true, якщо хоч одна операція порівняння повертають true, інакше повертає false: $a == 5 || $b = 6

    Аналогічно операції | : $a< 5 or $b > 6

    Повертає true, якщо операція порівняння повертає false: !($a >= 5)

    Повертає true, якщо одне з значень дорівнює true. Якщо обидва рівні true або жоден з них не рівний true, повертає false. Наприклад: $a = 12; $ b = 6; if($a xor $b) echo "true"; else echo "false";

    Тут результат логічної операції буде false, тому що обидві змінні мають певне значення. Змінимо код:

    $a=12; $b=NULL; if($a xor $b) echo "true"; else echo "false";

    Тут результат буде true , оскільки значення однієї змінної не встановлено. Якщо змінна має значення NULL, то логічних операціях її значення розглядатиметься як false

Бітові операції

Бітові операції проводяться над окремими бітами числа. Числа розглядаються у двійковому поданні, наприклад, 2 у двійковому поданні 010, число 7 - 111.

    & (логічне множення)

    Множення виробляється порозрядно, і якщо в обох операндів значення розрядів дорівнює 1, то операція повертає 1, інакше число повертається 0. Наприклад: $a1 = 4; // 100 $ b1 = 5; //101 echo $a1 & $b1; // одно 4

    Тут число 4 у двійковій системі одно 100, а число 5 одно 101. Порозрядно помножимо числа і отримаємо (1*1, 0*0, 0 *1) = 100, тобто число 4 у десятковому форматі.

    | (логічне складання)

    Схоже на логічне множення, операція також проводиться за двійковими розрядами, але тепер повертається одиниця, якщо хоча б одного числа в даному розряді є одиниця. Наприклад: $a1 = 4; // 100 $ b1 = 5; //101 echo $a1 | $b1; // одно 5

    ~ (логічне заперечення)

    інвертує всі розряди: якщо значення розряду дорівнює 1, воно стає рівним нулю, і навпаки. $ b = 5; echo ~$b;

    x<

    x>>y - зсуває число x праворуч на y розрядів. Наприклад, 16>>1 зсуває число 16 (яке в двійковому поданні 10000) на один розряд праворуч, тобто в результаті виходить 1000 або число 8 у десятковому поданні

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

Для об'єднання рядків використовується оператор "крапка". Наприклад, з'єднаємо кілька рядків:

$a="Привіт"; $b="світ"; echo $a. $b. "!";

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

Логічні операції існують у всіх мовах програмування та PHPне виняток. Крім простого поділу, множення, складання чи віднімання існують ще цілісне і залишкове поділу, про які ми зараз і поговоримо, а також розберемо їх, використовуючи докладні приклади.

Цілочисельне поділ - це виведення цілої частини від поділу. Наприклад, якщо ми розділимо 5 на 2, то отримаємо 2, а не 2,5.

З залишковим розподілом все по-іншому. Це виведення залишку від розподілу на ціле число. Наприклад, поділивши ту саму п'ятірку, ви отримаєте не 2, а 1, тому що 5 поділивши на 2, ми отримуємо 2, а в залишку залишається 1.

Як виконати цілий поділ в PHP

Наприклад, в Python цей поділ відбувається за допомогою простого оператора: "//".

А в PHPзробити це буде не так просто, але все ж таки процес не вимагає надзнань мови.

Наведемо приклад, як можна реалізувати.

В PHPсьомий версії функція виглядає так:

Intdiv();

У старішій версії, ця ж функція виглядає так:

Також існує спосіб для всіх версій:

Floor();

Як оформити?

Наприклад, візьмемо першу функцію, решта виконуються приблизно також.

$result = intdiv(10, 3); echo $result;

Залишковий поділ у PHP

Для того, щоб вивести цілий залишок від розподілу в PHP,Досить просто поставити оператор "%".

$i = 10%3; echo $i;

Як бачимо, все досить просто не вимагає тривалих пояснень.

Де можна використовувати?

Знання цілісного розподілу в PHPбудуть дуже корисні, якщо вам потрібно порівнювати два числа, створювати число-перевертень (популярна вправа), або, наприклад, програму під назвою FizzBuzz. Суть її в тому, що ви маєте написати цикл від 1 до 100, який ділить кожне число на 3 і 5. Якщо число, поділене на 3, у залишку дало 0, то пишемо Fizz, якщо поділене на 5, то Buzz, а якщо , Поділивши і 5, і 3, в залишку отримуємо 0, то пишемо FizzBuzz. Це дуже популярне завдання на співбесідах. Якщо ви виконали його самостійно, то можете пишатися собою.

Або, наприклад, ми маємо з числа 452 вивести всі його числа (4, 5, 2).

Висновок

Безумовно, цілісне і залишкове поділу корисні і зустрічаються досить часто, використовувати їх не так зручно, як у Python, але все ж таки важливо.

Тепер ви на крок ближче до вивчення мови програмування PHP,а в майбутньому станете ще ближче, якщо так само старанно долатимете труднощі.

2022 wisemotors.ru. Як це працює. Залізо. Майнінг. Криптовалюта.