Операції у PHP. Умовний оператор if у PHP Логічні змінні у php загальна інформація

На уроці будуть розглянуті умовні оператори php: оператор if та оператор перемикання switch

Умовні оператори php представлені трьома основними конструкціями:

  • оператор умови if,
  • оператор перемикання switch
  • і тернарний оператор.

Розглянемо докладніше кожен із них.

PHP оператор if

Рис. 3.1. Умовний оператор IF, укорочений варіант


Рис. 3.2. Синтаксис умовного оператора IF ELSE


Рис. 3.3. Повний синтаксис умовного оператора IF elseif

Підсумуємо:

Повний синтаксис:

if (умова) ( // якщо умова істинно operator1; operator2; ) elseif(умова) ( operator1; ... ) else ( // якщо умова помилкова operator1; operator2; )

  • Укорочений синтаксис може не містити частини конструкції з else і не містити додаткової умови elseif
  • Замість службового слова elseif можна писати else if (окремо)
  • В одній конструкції if може бути кілька elseif. Буде виконано перший вираз elseif, що зустрівся, рівний TRUE .
  • У разі наявності альтернативної умови elseif конструкція else повинна йти останньою в синтаксисі.

В умовному операторі може використовуватися двокрапка: замість фігурних дужок. У такому разі закінчується оператором службовим словом endif

Рис. 3.4. Умовний оператор If та Endif у php

Приклад:

if($x > $y): echo $x." більше, ніж ".$y; elseif($x == $y): // під час використання ":" не можна писати окремо else if echo $x." і ".$y; else: echo $x." не > і не = ".$y; endif;

Важливо:При використанні в конструкції двокрапки замість фігурних дужок elseif не можна писати в два слова!

Логічні операції за умови

В умовах if у дужках можуть бути наступні операції:

Приклад:перевірити значення числової змінної: якщо вона менша чи дорівнює 10, — видавати повідомлення «число менше або дорівнює 10», у протилежному випадку видавати повідомлення «число більше 10»


Рішення:

$number=15; if ($number<=10) { echo "число меньше или равно 10"; } else { echo "число больше 10"; }

Блоки php коду можна розривати, розглянемо приклад:

Приклад:Виводити на екран html-код "а рівно 4"якщо змінна $a дійсно дорівнює 4


1 Рішення:
1 2 3 4

2 Рішення:

1 2 3 A одно 4

A одно 4

Завдання php 3_1:Виводити переклад квітів з англійської на російську, перевіряючи значення змінної (в якій надано колір: $a="blue")


Завдання php 3_2:Знайти максимальне із трьох чисел

Операції порівняння та правило брехні

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

Тобто. як умова може виступати єдина змінна. Розглянемо приклад:

1 2 3 4 $a = 1; if ($a) ( echo $a ; )

$a=1; if ($a) ( echo $a; )

У прикладі транслятор мови php розглядатиме змінну в дужках на правило брехні:

Правило брехні або що вважається хибним:

  • логічне False
  • цілий нуль ( 0 )
  • дійсний нуль ( 0.0 )
  • порожня стрічката рядок «0»
  • масив без елементів
  • об'єкт без змінних
  • спеціальний тип NULL

Таким чином, у розглянутому прикладі змінна $a дорівнює одиниці, відповідно умова буде істинною і оператор echo $a; виведе на екран значення змінної.

Завдання php 3_3:дана змінна а з рядковим значенням. Якщо а дорівнює імені, то виводити "Привіт, ім'я!"якщо а дорівнює порожньому значенню, то виводити "Привіт незнайомцю!"

Логічні конструкції І АБО і НЕ в умовному операторі

  1. Іноді необхідно передбачити виконання одночасно кількох умов. Тоді умови з'єднуються логічним оператором І — && :
  2. $a=1; if ($a>0 || $a>1) ( echo "a > 0 або a > 1"; )

  3. Для вказівки помилковості умови використовується логічний оператор НЕ — ! :
  4. 1 2 3 4 $a = 1; if (! ($a< 0 ) ) { echo "a не < 0" ; }

    $a=1; if (!($a<0)) { echo "a не < 0"; }

Оператор Switch PHP

Оператор switch або «перемикач» замінює кілька конструкцій, що йдуть if . При цьому він порівнює одну змінну з безліччю значень. Таким чином, це найбільш зручний засіб для організації мультигалуження.

Синтаксис:

1 2 3 4 5 6 7 8 9 10 switch ($ змінна) (case "значення1" : оператор1 ; break ; case "значення2" : оператор2 ; break ; case "значення3" : оператор3 ; break ; [ default : оператор4 ; break ; ] )

switch($змінна)( case "значення1": оператор1; break; case "значення2": оператор2; break; case "значення3": оператор3; break; )

  • Оператор може перевіряти як строкові значення (тоді вони вказуються в лапках), і числові (без лапок).
  • Оператор break у конструкції обов'язковий. Він здійснює вихід з конструкції за істинної умови та виконання відповідної умови оператора. Без break будуть виконуватись оператори всіх case незалежно від їхньої істинності.

Рис. 3.5. Умовний оператор Switch


Приклад:заданий масив із повними чоловічими іменами. Перевіряти перший елемент масиву та залежно від імені, видавати привітання з коротким ім'ям.


Рішення:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $names = array ("Іван", "Петро", "Семен"); switch ($names [0]) (case "Петро": echo "Привіт, Петро!"; break; case "Іван": echo "Привіт, Ваня!"; break; case "Семен": echo "Привіт, Ваня!); " ; break ; default : echo "Привіт, $names!"; break; )

$names=array("Іван","Петро","Семен"); switch($names)( case "Петро": echo "Привіт, Петро!"; break; case "Іван": echo "Привіт, Ваня!"; break; case "Семен": echo "Привіт, Ваня!"; break) ; default: echo "Привіт, $names!"; break; )

Завдання php 3_4:

  • Створіть змінну $day і надайте їй довільне числове значення
  • За допомогою конструкції switch виведіть фразу «Це робочий день»якщо значення змінної $day потрапляє в діапазон чисел від 1 до 5 (включно)
  • Виведіть фразу «Це вихідний день»якщо значення змінної $day дорівнює числам 6 або 7
  • Виведіть фразу «Невідомий день»якщо значення змінної $day не потрапляє в діапазон чисел від 1 до 7(включно)

Доповніть код:

1 2 3 4 5 6 7 8 9 10 11 12 ... switch (... ) ( case 1 : case 2 : ... echo "Це робочий день"; break; case 6 : ... default : ... )

Switch(...)( case 1: case 2: ... echo "Це робочий день"; break; case 6: ... default: ... )

Тернарний оператор PHP

Тернарний оператор, тобто. з трьома операндами має досить простий синтаксис, в якому ліворуч від знака? записується умова, а праворуч - два оператори розділені знаком: , ліворуч від знака виконується оператор при істинності умови, а праворуч від знака: виконується оператор за помилкової умови.

умова? оператор1: оператор2;

PHP підтримує стандартні логічні оператори AND і &&, OR та || ,! (не) та XOR . Логічні операторидозволяють порівнювати результати роботи двох операндів (значення або виразу) з метою визначення факту повернення одним з них або обома значення true або false та вибору відповідного продовження виконання сценарію в залежності від поверненого значення. Як і оператори порівняння, логічні оператори повертають одне логічне значення - true чи false , залежно від значень що з обох боків від оператора.

Логічне АБО (OR та ||)

Оператор логічне АБО позначається як OR чи || . Він виконує операцію «логічне АБО» над двома операндами. Якщо один або обидва операнди мають справжнє значення, він повертає true . Якщо обидва операнди мають помилкові значення, він повертає false . У вас ймовірно постало питання, навіщо ж зробили два варіанти одного оператора? Сенс двох різних варіантів оператора «логічне АБО» у тому, що вони працюють із різними пріоритетами.

Спочатку розберемо як працює оператор . І так, якщо один або обидва його операнди мають справжнє значення, він повертає true . Якщо обидва операнди повертають помилкові значення, він поверне false .

Оператор OR працює також як і оператор || одним винятком, якщо оператор OR використовується з привласненням, то спочатку він обчислить і поверне значення лівого операнда, в іншому він працює так само як і оператор || , тобто. якщо один або обидва його операнди мають справжнє значення, він повертає true . Якщо обидва операнди повертають помилкові значення, він поверне false .

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

1 // Спочатку змінною надається значення false, а потім обчислюється другий операнд // Дія пріоритету: ($ var2 = false) or true $ var2 = false or true; echo $var2; // false не виводиться // ($var3 = 0) or 3 $var3 = 0 or 3; echo "
$var3"; // => 0 ?>

Будь-які оператори порівняння та логічні можна комбінувати у складніші конструкції:

Варто згадати ще один важливий момент, щодо обох операторів OR і || . Оператор «логічне АБО» починає свої обчислення зі свого лівого операнда, якщо він повертає true, то правий операнд обчислюватися не буде. Це дозволяє заощаджувати час виконання, але потрібно уважно стежити, щоб код, від якого може залежати коректна робота програми, не був поміщений у правий операнд.

Логічне І (AND &&)

Оператор логічне І позначається як AND або &&. Він виконує операцію «логічне І» над двома операндами. Він повертає true тоді й тільки тоді, коли обидва операнди мають значення true . Якщо один або обидва операнди повертають значення false, оператор повертає false. Сенс двох різних варіантів запису оператора «логічне І» такий же, як і у двох попередніх операторів, а саме в тому, що вони працюють з різними пріоритетами.

Спочатку розберемо як працює оператор &&. І так, якщо обидва його операнди мають справжнє значення, він повертає true . Якщо хоча б один або обидва його операнди повертають значення false, він теж поверне false.

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

Для розуміння розглянемо тепер, як це працює на практиці:

$bar3"; // => 9 ?>

Виключне АБО (XOR)

Оператор виключає АБО позначається як XOR. Він повертає значення true, якщо один і лише один з операндів має значення true. Якщо обидва операнди мають значення true, оператор поверне значення false.

Так як пріоритет оператора XOR такий же як і в операторів AND і OR (нижче ніж у оператора привласнення), і він використовується у виразі з привласненням, спочатку він обчислює і повертає значення лівого операнда.

6 $a1 = 19 xor 5 > 6; var_dump($a1); // => 19 var_dump(true xor true); // false var_dump((2< 3) xor (5 != 5)); // true ?>

Логічне НЕ(!)

Оператор логічне НЕ, його також називають заперечення позначається знаком! . Він є унарним оператором, що поміщається перед одиночним операндом. Оператор логічне НЕ використовується для інверсії логічного значення свого операнда і завжди повертає true або false .

Якщо потрібно інвертувати значення виразу, наприклад a && b , необхідно використовувати круглі дужки: !(a && b) . Також за допомогою оператора! можна перетворити будь-яке значення x на його логічний еквівалент, двічі застосувавши оператор: !!x .

>> Я гадаю, що ця відповідь і невтішно усвідомлюють, що розрізняються відповіді між "||" і "OR" operadors.

Відповідь використовується в link to on operator precedence.

The "||" Operators є evaluated before assignment ("="), де є "or" operators are evaluated after the assignment. У вашому другому еквіваленті ви знайдете PHP для першого визначення результату "(choice1 != false ? "hah" : "boo")" до $val, then "or" it against the rest of the statement. Try the example below and you will see what I mean (note the extra brackets to enforce precedence):

define ("choice1", false);
define ("choice2", "dog");
define ("default1", "other");
$ val = array ();

$val [ " Test 1 " ] = (choice1 != false ? "hah" : "boo" ) || (choice2 != false ? "hah2" : "boo2" ) || (default1 != false ? "hah3" : "boo3");
$val [ "Test 1b" ] = ((choice1 != false ? "hah" : "boo" ) || (choice2 != false ? "hah2" : "boo2" ) || (default1 != false ? "hah3 ": "boo3"));
$val [ "Test 2" ] = (choice1 != false ? "hah" : "boo" ) or (choice2 != false ? "hah2" : "boo2" ) or (default1 != false ? "hah3" : " boo3");
$val [ "Test 2b" ] = ((choice1 != false ? "hah" : "boo" ) or (choice2 != false ? "hah2" : "boo2" ) or (default1 != false ? "hah3" : "boo3"));

Foreach ($val as $test => $result ) (
print ("$test:"); var_dump ($result); print "
\n
\n" ;
}
?>

test at hto dot com

Тому що OR shorthand for an if block can produce more
readable code with less typing, it is tempting to produce functions that will return FALSE on failure or some other data type on success. Як mysql_connect, який "Виберіть MySQL link identifier on success, або FALSE on failure."

The novice php php developer повинен avoid creating functions which might produce a FALSE on failure and integer on success, if there is any chance that the integer might be zero.

blah blah blah;
$i = give_me_liberty() or die("FATAL DB ERROR!");
blah blah blah;
?>

ironmo67 at yahoo dot com

Discovered asowhat annoying different between PHP and Perl:


if(! some_function()) return false ;
?>

cannot be rewritten as the prettier:

function some_function ()( return false ; )
some_function() or return false;
?>

The following will work however:

function some_function ()( return false ; )
some_function () або die ();
?>

Can you guess why? Simply, die() is a function and "return" is a statement (відповідно між print() and echo, sort of). Це реально для того, щоб шкодити, якщо я (!)() version виконаний і неможливий, але це, це "не буде, якщо (some_c_function == 0) ( do something ).

Більшість думок, як мусить бути, avoided simply by being clear that &, | and ^ are *not* logical operators. Що "не є" не міститься на цій сторінці. Вони "re operators that act on the binary representations of numbers. Вони не мають логічних величин (ie, "true" or "false") as arguments without first converting them to the numbers 1 and 0 respectively. Nor do they return logical values , but numbers Sure, you can later treat those numbers as they were logical values ​​(in which case 0 is cast to "false" and anything else is cast to "true"), but that"sa consequence of PHP"s type casting rules, and nothing to do with behaviour of the operators.

Якщо ви є логічними функціями, використовуйте логічні учасники; якщо ви намагаєтеся зробити bitwise operations, використовуйте bitwise operators ... використовуючи один для інших повідомлень як хороший спосіб зробити такі проблеми.

kws_ at hotpop dot com

"Just Because You Can, Doesn"t Mean You Should."

Я також бачу, що circumventing шорт-circuit evaluation і relying на side-effects в conditional expressions is exercising bad style. Записуючи код того, що документи його, використовуючи чіткі і тяжкіперед структури strikes, я якнайбільше практики, що використовувалися, здібності та рішучість-read-expression and explaining it with comments (or worse yet, no documenting it at all!) Indeed, be written for the programmer"s eyes more so than the computer"s.

Utilizing bitwise operators в логічному контексті можуть усвідомлювати expectations of reader and mai create confusion because bitwise operators imply bit-field operands.

I also feel that assuming that short-circuit evaluation is best for logical constructs IS within the compiler's "rights", since when logical operators are used for their intended purpose, the assumptions that short-circuiting makes *ARE* (Once again, when used correctly) optimize evaluation of logical expressions.

Це не мої наміри безпосередньо flame or insult any individual, але тільки для того, щоб відповісти на використання стиснутого й натхнення нового (і навіть деякий досвід) програмістів, щоб отримати чіткі і verbose коди, і думати про programmers, більше, ніж the комп'ютери, які в майбутньому намагаються розраховувати на ваші створення.

In answer to braintreno:

Second example you brought is the correct way to do it! Це не здатний логічно на всіх, це те, що робить ваш код readable, не відповідаючи на обидві сторони ефектів!! Це є дуже простий, щоб отримати, перш ніж один і це буде для того, щоб отримати maintain.

Для того, щоб думати про те, що CheckThisOrOther() funtion echo information to user alone, ви повинні бути stripped of your coding licenci. Якщо ви знайдете на maintain на своїх scripts, I'd have to hate you.

Це не означає, що flame bating, як це звук! Source code is not written for computers to execute, але for coders to read! Keep that at heart and your co-workers буде для вас!

braintrino

Shadedecho's post force evaluation of both OR expression is actually exactly what should be done to suppress short-circuit optimization.

Там є багато обставин, що ви не повинні отримувати комп'ютер до шорт-circuit any evaluation, особливо, коли ви збираєтеся зробити і/або зайнятися.

Для того, щоб отримати доступ до кожного користувача, щоб дізнатися про те, що ваше ім'я було запущене повідомлення на сторінці AND/OR, якщо користувач здійснює duplicated the same answer for more than one entry, то я потребую, щоб перейти до форми. the client informing what I want to be correctod.

Function SomeAnswersAreMissing()
{
...
echo "Oops! You missed answering some questions.";
return TRUE;
}

Function SomeAnswersAreDuplicated()
{
...
echo "Oops! You can answer both the same way.";
return TRUE;
}

If (SomeAnswersAreMissing() || SomeAnswersAreDuplicated())
SendFormAgain();

Якщо ви думаєте, що користувач буде тільки бачити повідомлення про погіршення, але не duplicated answer warning, even if both are true. Це не informative to the user because he/she will have to re-submit the form twice до he/she зроблено everything he/she did wrong, і frustrate the hack out of them. Це не є user-friendly.

If (SomeAnswersAreMissing() | SomeAnswersAreDuplicated())
SendFormAgain();

Там, як варіантні messages є sent at the same time, and the user can correct it in one re-send.

Так, shadedecho, I had been looking for away to override the compiler"s stupid short-circuit optimization. The computer cannot just assume that short-circuiting is the best:(

BTW, of course you can do:

$you_made_a_mistake = false;

If (SomeAnswersAreMissing())

if (SomeAnswersAreDuplicated())
$you_made_a_mistake = true;

If ($you_made_a_mistake)
SendFormAgain();

But that is convoluted logic!!!

hop

Dear Newbie,

(as i don"t see such ideas creeping up in experienced programmers" minds...)

Please don't pay attantion to shadedecho's post from 14-Mar-2003 4:02! He is heavily relying on obscure side effects, which is notly very bad programming practice, but also does not achieve the optimization he thinks it is.

The proper way to make this


echo $a;
}

Work like shadedecho wants is (although the example as whole is rather inapt):

$a.=blah();
$a.=blah2();

If ($a) ( echo $a; )

Якщо ви готуєтеся про те, що чати до вас будуть думати, що вони дійсно хотіли б отримати всі відмінні елементи від двох різних tables db. Even there he is mistaken. Попередній спосіб до цього є процес першого table and then process the second table.
Це не тільки тільки більше, ніж readable, аніж робота з "|", це не так, як літо.

shadedecho

It appears (after much frustrating but ultimately helpful searching and discussion on forums like tek-tips) that the
|| and the && are "short-circuited" as has been previously noted BUT the | and & operators (documented by PHP as bitwise operators) behave as їх non-short-circuited counter-parts, respectively.

Function blah() (
echo "hello< br>";
return "from blah()< br>";
}

Function blah2() (
echo "world\< br>";
return "from blah2()< br>";
}

If (($a .= blah()) || ($a .= blah2())) (
echo $a;
}

Цей результат повинен бути в наступному output:

Hello
from blah()

Notice "world" didn"t get echo"d і "from blah2()" didn"t get concat"d в $a variable, тому що перша оцінка до $a була successful, so "short-circuting" kicks in and the boolean test terminates without evaluating the rest of it.

HOWEVER, if you replace || with just | in that "if" statement, you get the output:

Hello
world
from blah()
from blah2()

Eureka! всі частини віртуального тесту є оцінені, в обмеженій лівій-на-рівній моделі, і дотримуючись всіх послідовних правил, як це може бути.

Це робиться цілковитим... За допомогою bitwise operators, what is occurring is the bitwise-level operation on the result of 2 non-bitwise operations (the assignments). Якщо не operation bitwise returns null (в інших словах, значення, що встановлені turns out to be null or 0), bitwise operator would bind to that (or more appropriately, would "see" it) as a "0", іншим, вона повинна бути не zero (string bits with at least one "1" in it).

Then a bitwise | is done on the two values, and if either is non-zero (has "1" bits in it) then result will hat those "1" bits in it (non-zero), and the if statement will interpret any non- zero value as true in a boolean test. Likewise, if both operands to the | були null або 0, то результат може бути 0 значення, який "як" буде interpret as false.

if statement above is doing a bitwise | on (in this case) 2 non-zero values ​​(with "1"s in it at the bit level), so the | Operation returns a non-zero value which is then reinterpreted by the if statement as TRUE!

Так, в цьому особливому випадку, коли ви працюєте на string до всіх не-шорт-circuited boolean tests, ці роботодавці працюють на своїх діячах на bitwise level, і невже вони не є comparison operadors, але математичні захисники, вони можуть Circuited, і результат behavior is non-short-circuited "boolean test".

I know, you must think I am crazy for trying to get around a built-in optimization like this, but I assure you there is are good reason for it, if you are interested, you can check out this thread as I have avery long post in there which explains what I was trying to do:

Це 9th post down, де ви будете думати про те, що ми збираємося", з якою я хотів би до optimize.

Which probably isn"t what you want.

Це може бути тим, хто любить їх code to read like english, і думати про те, що послідовність differences of the operators є relatively exotic: they aren"t.

Як для мене I ran into this problem because there is no symbolic logical XOR (for instance, no ^^) so I had to use XOR, and then figured that in similar places I'd ought to us AND and OR, and then my code broke:)

So now I"ve got to
$a = ($b xor $c);

Jesse Thompson
bend.com

yohgaki at hotmail dot com

In PHP4, "and", "or", "&&", "||" -- all are "short circuit" як у C/C++. In PHP3, I think it was not.

"Short circuit" means language stops evaluation of expression when conditions are determined. (Most language uses short circuit evaluation for logical condition)

$a = true;
$b = false;
if ($a || $b) (
}

Цей "if" statement only evaluate $a, since $a is true і whole condition must be true. (i.e. if $b is a function instead of value, the function will not be called)

muerte at web-ster dot com

I був hoping to find an operator similar to ||= functions in perl. My first thought would be:

$i = $i or "default"

Якщо ви не працюєте, якщо ви хочете, щоб зменшити значення для ваших варіацій тільки якщо вони не будуть визначені CAN HOWEVER:

$i or $i = "default"

Перші приклади того, що НЕ працює, або функціонал не перезавантажується як це в Perl.

dante at hearme dot com


I wanted to do something like this:

$choice1 = "";
$choice2 = "dog";
$ default = "other";
$val = $choice1 || $choice2 || $ default;

Але якщо $val1 буде лише 1 або 0. Instead I did this:

$choice1 = "";
$choice2 = "dog";
$ default = "other";
$val = $choice1 або $choice2 або $default;

Now $val містить string "dog". That"s
weird that "or" is different from "||"...and I would
think that the "||" should be smart enough to handle
strings...the way PERL does. Guess not. Maybe it"s
a design choice.

Останнє оновлення: 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. "!";

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


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

If (умова)(
умова виконана, робимо так
}
else
{
умова не виконана, робимо інакше
}
Сподіваюся, логіка умовної операції зрозуміла. Тепер розглянемо приклад.

$a = 5;
$ b = 25;

// Тепер увага! Умова: Якщо $b більше $a
// Знаки > і< , как и в математике, обозначают больше и меньше
if($b > $a)
{
// якщо умова виконана, то виконуємо цю дію
echo "$b більше $a";
}
else
{
// якщо не виконано, то це
echo "$a більше або одно $b";
}
?>
Демонстрація Завантажити вихідні
У результаті скрипт виведе 25 більше 5. Приклад досить простий. Сподіваюся, все зрозуміло. Тепер пропоную розглянути ситуацію складніше, де потрібно дотриматись кількох умов. Кожна нова умова міститиме після основної умови if()- допоміжне, яке записується як else if(). В кінці як завжди буде else.

Завдання:У школі проводять тестування. Скрипту потрібно вирахувати бал, знаючи умови отримання кожної оцінки та сам бал школяра. Давайте подивимося, як це записати, і не забудьте прочитати коментар.

$ Test = 82; // припустимо школяр написав тест на 82 бали

// Першу умову напишемо для п'ятірки
if($test > 90)
{
// якщо умова дотримано, то виконуємо цю дію.
echo "Оцінка 5";
}
// Знак && позначає "і, об'єднання", що умова дотримано якщо і те, і то вірно
// тобто бал менше 91 і більше 80, тоді 4. Інакше умови зчитуються далі
else if ($test< 91 && $test > 80)
{
echo "Оцінка 4";
}
else if ($test< 81 && $test > 70)
{
echo "Оцінка 3";
}
else
{
echo "Треба ще раз написати тест...";
}
?>
Демонстрація Завантажити вихідні
Наш школяр, який встигає та відпочити, та написати нормально тест отримує оцінку 4! А принцип роботи сподіваюся зрозумілим.

Можливий і короткий запис роботи умовної операції, коли Вам потрібна дія лише у разі дотримання умови.

$age = 19; // Змінна з віком

If ($age > 17)(
echo "Все! Мені можна робити все, що завгодно! Мені вже $age!";
}
Цілком собі милий приклад короткого запису умовної операції. elseписати необов'язково.

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

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

Приклад Назва Результат
$a == $b Так само True, якщо $a дорівнює $b
$a === $b Ідентично True, якщо $a дорівнює $b і обидві змінні належать одному типу
$a != $b Не дорівнює True, якщо $a не дорівнює $b
$a === $b Не ідентично True, якщо $a не дорівнює $b і обидва їх типи не співпадають
$a > $b Більше ніж True, якщо $a більше, ніж $b
$a< $b Меньше чем True, если $a меньше, чем $b
$a >= $b Більше або одно True, якщо $a більше або одно $b
$a<= $b Меньше или равно True, если $a меньше или равно $b
Тепер розглянемо оператори на прикладах:

// Всупереч звичці = означає привласнення значення змінної, а == як одно
if ($a == 5)(
echo "$a дорівнює 5"; // виведе "5 і 5"
) else (
echo "$a не дорівнює 5";
}

If ($a! = 6) (
echo "$a не дорівнює 6"; // виведе "5 не одно 6". Потрібно у разі заперечення
) else (
echo "$a якимось чином дорівнює 6";
}

/ / З більше і менше думаю все зрозуміло. Тому приклад складніший
if ($a<= 6){
echo "$a менше або дорівнює 6"; // виведе "5 менше або одно 6"
) else (
echo "$a більше 6";
}

Логічні оператори PHP

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

Приклад Назва Результат
$a and $b Логічне "і" TRUE якщо і $a, і $b TRUE.
$a or $b Логічне "або" TRUE якщо $a або $b TRUE.
$a xor $b Виключне "або" TRUE якщо $a, або $b TRUE, але не обидва.
! $a Заперечення TRUE, якщо $a не TRUE.
$a && $b Логічне "і" TRUE якщо і $a, і $b TRUE.
$a || $b Логічне "або" TRUE якщо $a або $b TRUE.
Вже звернули увагу, що для операцій іі абочи є додаткові оператори? Так зроблено для того, щоб розставити пріоритети у складних операціях порівняння. У таблиці логічні оператори наведено порядку пріоритету: від меншого до більшого, тобто, наприклад, || має більший пріоритет ніж or.

Переходимо до прикладів

$a = 5;
$ b = 6;
$ c = 7;

// Умова: Якщо 5 не дорівнює 6 (ВІРНО) І 6 не дорівнює 7 (ВІРНО)
if ($a< 6 && $b != $c){
echo "Справді так!"; // виведе "Справді так!" т.к. ОБИДЯ умови ВІРНІ
) else (
echo "Одна з умов не вірна";
}

// Умова: Якщо 6 не дорівнює 6 (НЕВІРНО) АБО 6 не дорівнює 7 (ВІРНО)
if ($b != 6 || $b != $c)(
echo "Все так!"; // виведе " Все так! " , т.к. хоча б ОДНА з умов ВІРНО
) else (
echo "Обидві умови не вірні";
}

Тернарний оператор

До питання тернарного коду я пропоную Вам повернутися пізніше. Зовсім не згадати його я не міг, тому що це важлива конструкція, яка суттєво скорочує розмір коду. Пропоную одразу розглянути код.

Суть коду:(Умова) ? значення a якщо true: значення a якщо false

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

// Приклад використання тернарного оператора
$settings = (empty($_POST["settings"])) ? "За замовчуванням" : $_POST["settings"];

// Наведений вище код аналогічний до наступного блоку з використанням if/else
if (empty($_POST["settings"])) (
$settings = "За замовчуванням"; // Якщо нічого не передано, то залишаємо "За замовчуванням"
) else (
$settings = $_POST["settings"]; // Якщо передано, то $settings надається передане значення.
}
?>
Прочитайте коментарі до коду та все має бути зрозуміло.

Дякую за увагу!


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