Двумя основными операторами, обеспечивающими создание структур ветвления на основе условий, являются if и switch. Наиболее широко применяется оператор if, который используется в структурах перехода по условию. С другой стороны, в определенных ситуациях, особенно если приходится обеспечивать переход по одной из многочисленных ветвей в зависимости от значения единственного выражения, а применение целого ряда операторов if приводит к усложнению кода, более удобным становится оператор switch.
Прежде чем изучить эти операторы нужно разобраться в логических выражениях и операциях.
Логические операции
Логические операции позволяют комбинировать логические значения (называемые также истинностными) для получения новых логических значений. Как показано в таблице ниже, в языке PHP поддерживаются стандартные логические операции (and, or, not и xor), причем первые две имеют альтернативные версии.
Операция | Описание |
---|---|
and | Операция, результат которой принимает истинное значение тогда и только тогда, когда оба ее операнда имеют истинное значение |
or | Операция, результат которой принимает истинное значение, если один из ее операндов (или оба операнда) имеет истинное значение |
! | Операция, результат которой принимает истинное значение, если ее единственный операнд (задаваемый справа от знака операции) имеет ложное значение, и ложное значение, если операнд имеет истинное значение |
xor | Операция, результат которой принимает истинное значение, если любой из ее операндов (но не оба одновременно) имеет истинное значение |
&& | То же, что и операция and, но связывает свои операнды сильнее по сравнению с этой операцией |
|| | То же, что и операция or, но связывает свои операнды сильнее по сравнению с этой операцией |
Операции && и || должны быть знакомы программистам, работающим с языком C. Операцию ! обычно называют not, поскольку она становится отрицанием для того операнда, к которому применяется.
Чтобы проверить, имеют ли оба операнда значение TRUE, следует использовать оператор AND, который можно записать и как двойной амперсанд (&&). Оба оператора, AND и &&, являются логическими, их единственное отличие в том, что оператор && имеет более высокий приоритет, чем оператор AND. То же самое относится к операторам OR и ||. Оператор AND возвращает TRUE, только если оба операнда имеют значение TRUE; в противном случае возвращается значение FALSE.
Чтобы проверить, имеет ли хотя бы один операнд значение TRUE, следует использовать оператор OR, который можно записать и как двойную вертикальную линию (||). Этот оператор возвращает TRUE, если хотя бы один из операндов имеет значение TRUE.
При использовании оператора OR в программе могут появиться трудноуловимые логические ошибки. Если PHP обнаружит, что первый операнд имеет значение TRUE, он не станет вычислять значение второго операнда. Это позволяет экономить время исполнения, но вы должны внимательно следить за тем, чтобы код, от которого зависит корректная работа программы, не был помещен во второй операнд.
Проверить, имеет ли значение TRUE только один из операндов (но не оба сразу), позволяет оператор XOR. Этот оператор возвращает значение TRUE, если один и только один из операндов имеет значение TRUE. Если оба операнда имеют значение TRUE, оператор вернет значение FALSE.
Инвертировать логическое значение можно с помощью оператора NOT, который часто записывается и в виде восклицательного знака (!). Он возвращает значение TRUE, если операнд имеет значение FALSE, и значение FALSE, если операнд имеет значение TRUE.
В таблице ниже приведены некоторые логические выражения и их результаты:
Пример логического выражения | Результат |
---|---|
TRUE AND TRUE | TRUE |
FALSE AND TRUE | FALSE |
TRUE OR FALSE | TRUE |
FALSE OR FALSE | FALSE |
TRUE XOR TRUE | FALSE |
TRUE XOR FALSE | TRUE |
!TRUE | FALSE |
!FALSE | TRUE |
Операции сравнения
В таблице ниже показаны операции сравнения, которые могут применяться либо с числами, либо со строками:
Операция | Наименование | Описание |
---|---|---|
== | Равно | Операция, результат которой принимает истинное значение, если ее операнды равны друг другу, в противном случае принимает ложное значение |
!= | Не равно | Операция, результат которой принимает ложное значение, если ее операнды равны друг другу, в противном случае принимает истинное значение |
< | Меньше | Операция, результат которой принимает истинное значение, если левый операнд меньше правого, в противном случае принимает ложное значение |
> | Больше | Операция, результат которой принимает истинное значение, если левый операнд больше правого, в противном случае принимает ложное значение |
<= | Меньше или равно | Операция, результат которой принимает истинное значение, если левый операнд меньше или равен правому, в противном случае принимает ложное значение |
>= | Больше или равно | Операция, результат которой принимает истинное значение, если левый операнд больше или равен правому, в противном случае принимает ложное значение |
=== | Идентично | Операция, результат которой принимает истинное значение, если оба операнда равны друг другу и относятся к одному и тому же типу, в противном случае принимает ложное значение |
Необходимо следить за тем, чтобы не допустить одну весьма распространенную ошибку — не путать операцию присваивания (=) с операцией сравнения (==).
Приоритет операций
Безусловно, не следует слишком злоупотреблять стилем программирования, в котором последовательность выполнения операций в основном обусловлена использованием правил приоритета, поскольку код, написанный в таком стиле, является сложным для восприятия теми, кто в дальнейшем будет изучать его, но следует отметить, что операции сравнения имеют более высокий приоритет, чем логические операции. Это означает, что оператор с выражением проверки, подобном приведенному ниже
Код PHP
$var1 = 14; $var2 = 15; if (($var1 < $var2) && ($var2 < 20)) echo '$var2 больше $var1 но меньше 20';
можно переписать как
Код PHP
... if ($var1 < $var2 && $var2 < 20) ...
Инструкция if — else
Инструкция if позволяет исполнить блок кода, если условное выражение в этой инструкции имеет значение TRUE; в противном случае блок кода не исполняется. В качестве условия может применяться любое выражение, включающее проверки на ненулевое значение, равенство, NULL с участием переменных и значений, возвращаемых функциями.
Не важно, какие отдельные условные выражения составляют условное предложение. Если условие истинно, исполняется программный код, заключенный в фигурные скобки ({}). В противном случае PHP игнорирует его и переходит к проверке второго условия, проверяя все условные предложения, которые вы записали, пока не наткнется на инструкцию else, после чего автоматически выполнит этот блок. Инструкция else не является обязательной.
Синтаксис инструкции if:
if (условное выражение) { блок программного кода; }
Если в результате вычисления условного выражения получается значение TRUE, то блок программного кода, расположенный после него, будет исполнен. В следующем примере если переменная $username имеет значение ‘Admin’, будет выведено приветственное сообщение. В противном случае ничего не произойдет:
Код PHP
$username = "Admin"; if ($username == "Admin") { echo 'Добро пожаловать на страницу администратора.'; }
Если блок программного кода содержит только одну инструкцию, то фигурные скобки необязательны, тем не менее, хорошая привычка – ставить их всегда, поскольку с ними код легче читается и редактируется.
Необязательная инструкция else – это блок программного кода, исполняемый по умолчанию, когда условное выражение возвращает значение FALSE. Инструкцию else нельзя использовать отдельно от инструкции if, поскольку у else нет собственного условного выражения. То есть else и if в вашем коде всегда должны быть вместе:
Инструкции if и else
$username = "no admin"; if ($username == "Admin") { echo 'Добро пожаловать на страницу администратора.'; } else { echo 'Добро пожаловать на страницу пользователя.'; }
Не забывайте закрывать фигурной скобкой блок кода в инструкции if, если вы поставили фигурную скобку в начале блока. В блоке else тоже должны быть открывающая и закрывающая фигурные скобки, как в блоке if.
Все это хорошо, кроме случаев, когда вам требуется проверить несколько условий подряд. Для этого подойдет инструкция elseif. Она позволяет проверять дополнительные условия, пока не будет найдено истинное или достигнут блок else. У каждой инструкции elseif есть собственный блок кода, размещаемый непосредственно после условного выражения инструкции elseif. Инструкция elseif идет после инструкции if и перед инструкцией else, если таковая имеется.
Синтаксис инструкции elseif немного сложнее, но следующий пример поможет вам разобраться в нем:
Проверка нескольких условий
$username = "Guest"; if ($username == "Admin") { echo 'Добро пожаловать на страницу администратора.'; } elseif ($username == "Guest") { echo 'Просмотр не доступен.'; } else { echo 'Добро пожаловать на страницу пользователя.'; }
Здесь проверяется два условия, и, в зависимости от значения переменной $username, выполняются разные действия. И еще есть возможность что-то сделать, если значение переменной отличается от первых двух.
Тернарный оператор ?:
Оператор ?: – это тернарный (трехместный) оператор, который принимает три операнда. Он работает аналогично инструкции if, но возвращает значение одного из двух выражений. Выражение, которое будет вычисляться, определяется условным выражением. Двоеточие (:) служит разделителем выражений:
(условие) ? вычислить_если_условие_истинно : вычислить_если_условие_ложно;
В примере ниже проверяется значение, и в зависимости от его значения (TRUE или FALSE) возвращаются разные строки:
Создание сообщения с помощью оператора ?:
$logged_in = TRUE; $user = "Игорь"; $banner = (!$logged_in) ? "Зарегистрируйтесь!" : "С возвращением, $user!"; echo $banner;
Вполне очевидно, что приведенный выше оператор эквивалентен следующему оператору:
Код PHP
$logged_in = TRUE; $user = "Игорь"; if (!$logged_in) { $banner = "Зарегистрируйтесь!"; } else { $banner = "С возвращением, $user!"; } echo $banner;
Инструкция switch
Инструкция switch сравнивает выражение с несколькими значениями. Как правило, в качестве выражения используется переменная, в зависимости от значения которой должен быть исполнен тот или иной блок кода. Например, представим себе переменную $action, которая может иметь значения «ADD» (добавить), «MODIFY» (изменить) и «DELETE» (удалить). Инструкция switch позволяет легко определить блок кода, который должен исполняться для каждого из этих значений.
Чтобы показать разницу между инструкциями if и switch, выполним проверку переменной на соответствие нескольким значениям. В примере ниже приведен программный код, реализующий такую проверку на базе инструкции if, а в последующем примере – на базе инструкции switch:
Проверка на соответствие одному из нескольких значений (инструкция if)
if ($action == "ADD") { echo "Выполнить добавление."; echo "Количество инструкций в каждом блоке не ограничено."; } elseif ($action == "MODIFY") { echo "Выполнить изменение."; } elseif ($action == "DELETE") { echo "Выполнить удаление."; }
Проверка на соответствие одному из нескольких значений (инструкция switch)
switch ($action) { case "ADD": echo "Выполнить добавление."; echo "Количество инструкций в каждом блоке не ограничено."; break; case "MODIFY": echo "Выполнить изменение."; break; case "DELETE": echo "Выполнить удаление."; break; }
Инструкция switch берет значение, стоящее рядом с ключевым словом switch, и начинает сравнивать его со всеми значениями, стоящими рядом с ключевыми словами case, в порядке их расположения в программе. Если соответствие не найдено, не исполняется ни один из блоков. Как только совпадение обнаружено, выполняется соответствующий блок кода. Расположенные ниже блоки кода также исполняются – до конца инструкции switch или до ключевого слова break. Это удобно для организации процесса, состоящего из нескольких последовательных шагов. Если пользователь уже проделал некоторые шаги, он сможет продолжить процесс с того места, на котором прервался.
Выражение рядом с инструкцией switch должно возвращать значение элементарного типа, например число или строку. Массив можно задействовать только в виде его отдельного элемента, имеющего значение элементарного типа.
Выбор по умолчанию
Если значение условного выражения не совпало ни с одним из предложенных в инструкциях case вариантов, инструкция switch и в этом случае позволяет что-то сделать, примерно как инструкция else конструкции if, elseif, else. Для этого нужно последним вариантом в списке выбора сделать инструкцию default:
Создание сообщения об ошибке с помощью инструкции default
$action = "REMOVE"; switch ($action) { case "ADD": echo "Выполнить добавление."; echo "Количество инструкций в каждом блоке не ограничено."; break; case "MODIFY": echo "Выполнить изменение."; break; case "DELETE": echo "Выполнить удаление."; break; default: echo "Ошибка: команда $action не допустима, ". "можно использовать только команды ADD, MODIFY и DELETE."; }
Кроме обычного, инструкция switch поддерживает альтернативный синтаксис – конструкцию из ключевых слов switch/endswitch, определяющих начало и конец инструкции вместо фигурных скобок:
Инструкция switch завершается ключевым словом endswitch
switch ($action): case "ADD": echo "Выполнить добавление."; echo "Количество инструкций в каждом блоке не ограничено."; break; case "MODIFY": echo "Выполнить изменение."; break; case "DELETE": echo "Выполнить удаление."; break; default: echo "Ошибка: команда $action не допустима, ". "можно использовать только команды ADD, MODIFY и DELETE."; endswitch;
Прерывание исполнения
Если должен быть исполнен только блок кода, соответствующий определенному значению, то в конце этого блока следует вставить ключевое слово break. Интерпретатор PHP, встретив ключевое слово break, перейдет к исполнению строки, расположенной после закрывающей фигурной скобки инструкции switch (или ключевого слова endswitch). Но если не использовать инструкцию break то проверка продолжается в последующих ветвях case конструкции switch. Ниже показан пример:
Что происходит при отсутствии операторов break
$action="ASSEMBLE ORDER"; switch ($action) { case "ASSEMBLE ORDER": echo "Собрать заказ.<br>"; case "PACKAGE": echo "Упаковать.<br>"; case "SHIP": echo "Доставить заказчику.<br>"; }
Если переменная $action будет иметь значение «ASSEMBLE ORDER», результат работы этого фрагмента будет следующим:
Собрать заказ. Упаковать. Доставить заказчику.
Если предположить, что стадия сборки уже была пройдена, и переменная $action имеет значение «PACKAGE», то будет получен следующий результат:
Упаковать. Доставить заказчику.
Иногда, отсутствие операторов break бывает полезным, как в приведенном примере, где формируются стадии заказа, но в большинстве случаев следует использовать этот оператор.
addphp.ru
Логическое ИЛИ (OR и ||)
Оператор логическое ИЛИ обозначается как
OR
или||
. Он выполняет операцию «логическое ИЛИ» над двумя операндами. Если один или оба операнда имеют истинное значение, он возвращаетtrue
. Если оба операнда имеют ложные значения, он возвращаетfalse
. У вас вероятно возник вопрос, зачем же сделали два варианта одного оператора? Смысл двух разных вариантов оператора «логическое ИЛИ» в том, что они работают с различными приоритетами.Сначала разберем как работает оператор
||
. И так, если один или оба его операнда имеют истинное значение, он возвращаетtrue
. Если оба операнда возвращают ложные значения, он вернетfalse
.Оператор
OR
работает также как и оператор||
за одним исключением, если операторOR
используется с присваиванием, то сначала он вычислит и вернет значение левого операнда, в остальном он работает точно также как и оператор||
, т.е. если один или оба его операнда имеют истинное значение, он возвращаетtrue
. Если оба операнда возвращают ложные значения, он вернётfalse
.Чтобы стало понятнее, как они работают, приведем следующий пример:
Любые операторы сравнения и логические можно комбинировать в более сложные конструкции:
Стоит упомянуть еще об одном важном моменте, касательно обоих операторов
OR
и||
. Оператор «логическое ИЛИ» начинает свои вычисления со своего левого операнда, если он возвращаетtrue
, то правый операнд вычисляться не будет. Это позволяет экономить время исполнения, но нужно внимательно следить за тем, чтобы код, от которого может зависеть корректная работа программы, не был помещен в правый операнд.Логическое И (AND и &&)
Оператор логическое И обозначается как
AND
или&&
. Он выполняет операцию «логическое И» над двумя операндами. Он возвращаетtrue
тогда и только тогда, когда оба операнда имеют значениеtrue
. Если один или оба операнда возвращают значениеfalse
, оператор возвращаетfalse
. Смысл двух разных вариантов записи оператора «логическое И» такой же как и у двух предыдущих операторов, а именно в том, что они работают с различными приоритетами.Сначала разберем как работает оператор
&&
. И так, если оба его операнда имеют истинное значение, он возвращаетtrue
. Если хотя бы один или оба его операнда возвращают значениеfalse
, он тоже вернетfalse
.Оператор
AND
работает также как и оператор&&
за одним исключением, если операторAND
используется с присваиванием, то сначала он вычислит и вернёт значение левого операнда, в остальном он работает точно также как и оператор&&
. Если хотя бы один из его операндов возвращает значениеfalse
, он тоже вернетfalse
, также если оба операнда возвращают ложные значения, он возвращаетfalse
.Для понимания рассмотрим теперь, как это работает на практике:
Исключающее ИЛИ (XOR)
Оператор исключающее ИЛИ обозначается как
XOR
. Он возвращает значениеtrue
, если один и только один из операндов имеет значениеtrue
. Если оба операнда имеют значениеtrue
, оператор вернет значениеfalse
.Так как приоритет оператора
XOR
такой же как и у операторовAND
иOR
(ниже чем у оператора присваивания), и он используется в выражении с присваиванием, то сначала он вычисляет и возвращает значение левого операнда.Логическое НЕ (!)
Оператор логическое НЕ, его также называют отрицание обозначается знаком
!
. Он является унарным оператором, помещаемым перед одиночным операндом. Оператор «логическое НЕ» используется для инверсии логического значения своего операнда и всегда возвращаетtrue
илиfalse
.Если потребуется инвертировать значение выражения, например
a && b
, необходимо будет использовать круглые скобки:!(a && b)
. Также с помощью оператора!
можно преобразовать любое значениеx
в его логический эквивалент, дважды применив оператор:!!x
.puzzleweb.ru
There’s some joking, and misleading comments, even partially incorrect information in the answers here. I’d like to try to improve on them:
First, as some have pointed out, you have a bug in your code that relates to the question:
should be (note the
==
instead of=
in the first part):which in this case is functionally equivalent to
Second, note that these operators (
and or && ||
) are short-circuit operators. That means if the answer can be determined with certainty from the first expression, the second one is never evaluated. Again this doesn’t matter for your debugged line above, but it is extremely important when you are combining these operators with assignments, becauseThird, the real difference between
and or
and&& ||
is their operator precedence. Specifically the importance is that&& ||
have higher precedence than the assignment operators (= += -= *= **= /= .= %= &= |= ^= <<= >>=
) whileand or
have lower precendence than the assignment operators. Thus in a statement that combines the use of assignment and logical evaluation it matters which one you choose.Modified examples from PHP’s page on logical operators:
will evaluate to
true
and assign that value to$e
, because||
has higher operator precedence than=
, and therefore it essentially evaluates like this:however
will assign
false
to$e
(and then perform theor
operation and evaluatetrue
) because=
has higher operator precedence thanor
, essentially evaluating like this:The fact that this ambiguity even exists makes a lot of programmers just always use
&& ||
and then everything works clearly as one would expect in a language like C, ie. logical operations first, then assignment.Some languages like Perl use this kind of construct frequently in a format similar to this:
This would theoretically assign the database connection to
$connection
, or if that failed (and we’re assuming here the function would return something that evalues tofalse
in that case), it will end the script with an error message. Because of short-circuiting, if the database connection succeeds, thedie()
is never evaluated.Some languages that allow for this construct straight out forbid assignments in conditional/logical statements (like Python) to remove the amiguity the other way round.
PHP went with allowing both, so you just have to learn about your two options once and then code how you’d like, but hopefully you’ll be consistent one way or another.
Whenever in doubt, just throw in an extra set of parenthesis, which removes all ambiguity. These will always be the same:
Armed with all that knowledge, I prefer using
and or
because I feel that it makes the code more readable. I just have a rule not to combine assignments with logical evaluations. But at that point it’s just a preference, and consistency matters a lot more here than which side you choose.stackoverflow.com
If
Think that you are writing a PHP program for a store and you have some offers based on the age. Following is a single if condition that would show some special offers if the user is a teenage. It won’t show any offer if the user belongs to any other age group.
If Else
Think that you have got some general offers to other age groups. Then you can attach an else statement to show those offers if the user is not a teenage.
If Elseif
If you are going to introduce some adult offers (say for age over 40), you can use an elseif and have another condition to check whether the age is above 40.
Above code would first check whether the user is a teenage. If not, it would check whether if he is an adult. If that is also false, it would go to the else block. Like this, you can have more elseif blocks if you have offers for more age groups.
Having else block at the end is optional. You can decide not to show any offer if the user doesn’t belong to any of your defined age groups.
Condition of If Statements
Note that condition of if statements should always result in either true or false. If the result is true, immediate code block would be executed. If it is false, control will go to next elseif condition or else block depending on their availability.
Switch Case
Switch Case acts similar to Elseif control structure. Main difference is that Switch Case can be written in a way that it compares a given value with a set of predefined values without evaluating set of conditions.
default is the code block that would be executed if the given value is not matched with any of the pre-defined values. It acts similar to Else in If control structures and is optional.
If you don’t specify a break statement in a case block then PHP will execute next blocks till it finds a break statement. You can use this behavior if you need to have same output for more than one case.
In above code, if $day matches to Tuesday, Wednesday or Thursday, it will print ‘Keep going. Good luck!’.
If Else vs Switch Case
If Else can be used for any occasion where comparisons need to be done. Each If statement checks a condition and operands associated with the condition can be different from one If to another attached Elseif.
Switch Case is good to use when the same value is compared against a set of values. In Switch Case, since usually there are no conditions to evaluate, it can be bit efficient over an Elseif counterpart.
Though it’s not common, conditions can be used in Switch Case. Both Elseif and Switch Case below work the same way. Boolean true is passed to the Switch so that execution will always be passed to the inside code blocks.
Ternary Operator (Shorthand If/Else)
Ternary operator let us return one of two values based on a given condition. It’s syntax is like below.
In following example, if current time is less than 12 noon, it will print Good Morning! else it will print Welcome!. You can see that ternary operator let us evaluate conditions in one line.
We could also assign the value to a variable and print.
From PHP 5.3, it is possible to leave out the middle part of the ternary operator. In following example, if $name is not empty, its value will be printed. Otherwise Anonymous will be printed.
www.phpknowhow.com
Условия в php имеют ключевое слово if. И логические операторы OR или ||, AND или &&.
Конструкция условия if следующая:
if (условие) тогда действие;
Рассмотрим пример использования or and в операторе if
<?php
$x = 1;
if (isset($x)) echo "переменная x существует";
////////////////////////////////////////////////
if (isset($x) && $x == 1 ) echo "<br>x = 1";
////////////////////////////////////////////////
$x = $x+1;
if (isset($x) and $x == 2 ) echo "<br>x = 2";
////////////////////////////////////////////////
$x++;
if (isset($x) and $x == 3 && $x != 0) echo "<br>x = 3 and x != 0";
?>
Итак, мы видим, что в первом случае, есть только одно условие if (isset($x)), другими словами: если переменная $x существует, тогда выводится сообщение echo "переменная x существует";
Второе условие более сложнее: if (isset($x) && $x == 1 ) — если переменная существует и равна 1, тогда выводим echo "<br>x = 1"; <br> — это перевод строки.
Логический оператор AND выполняет условие только в том случае, если все условия истинные. Если хотя бы одно условие ложно, то все условие ложно. Вот почему оператор AND иногда сравнивается с математическим умножением. 451*6845*655*0 = 0. Какие бы не были числа, но если в выражении есть ноль, то все выражение нулевое.
Третье условие аналогично второму, только вместо логического оператора && используем оператор and. Этим я хотел показать, что логические операторы && и and имеют тот же смысл.
Четвертое условие показывает сложные условия, которые вы можете использовать в своих программах.
$x = $x+1;
$x++;
Две строки выше имеют один и тот же смысл. Они увеличивают переменную на единицу.
Результат работы данного кода будет следующим:
Логический оператор OR отличается от оператора AND тем, что если в условии есть хоть одно истинное условие, то все условие истинно. Вот почему оператор OR иногда сравнивается с математическим сложением. 0+0+0+1 = 1. Если в выражении много нулей, но есть хотя бы одна единица, то все выражение ненулевое.
Пример:
<?php
$x = 1;
$y = 5;
if ($x == 1 or $y ==2) echo "x = 1 or y = 2 хотя на самом деле x = $x,а y = $y";
if ($x == 1 || $y ==2) echo "<br>x = 1 or y = 2 хотя на самом деле x = $x,а y = $y";
?>
Мы видим, что на самом деле выполняется только одно условие, второе условие ложно, но благодаря оператору OR все выражение истинно. Также мы видим, что операторы OR и || идентичны.
Результат работы данного кода будет следующим:
life-prog.ru
Условный оператор if в PHP
Главное в действие данное оператора — это условие. if в переводе с английского значит если. Условие принимается в качестве аргумента (то что в скобках). В качестве условия может выступать логическое выражение или логическая переменная. Если проще, то смысл выражения будет такой:
Надеюсь логика условной операции понятна. Теперь давайте рассмотрим пример.
В итоге скрипт выведет 25 больше 5. Пример довольно прост. Надеюсь всё понятно. Теперь предлагаю рассмотреть ситуацию сложнее, где нужно соблюсти несколько условий. Каждое новое условие будет содержать после основного условия if() — вспомогательное, которое записывается как else if(). В конце как обычно будет else.
Задача: В школе проводят тестирование. Скрипту нужно высчитать балл, зная условия получения каждой оценки и сам балл школьника. Давайте посмотрим как это записать, и не забудьте прочитать комментарий.
Наш школьник, который успевает и отдохнуть, и написать нормально тест получает оценку 4! А принцип работы надеюсь понятен.
Возможна и короткая запись работы условной операции, когда Вам нужно действие только в случае соблюдения условия.
Вполне себе милый пример короткой записи условной операции. else писать не обязательно.
Дальше встаёт другой вопрос: а есть же, наверное, какие-либо другие операторы сравнения?
Операторы сравнения в PHP
Принцип работы условной операции понятен. Но, как Вы понимаете, способов сравнить намного больше. Давайте посмотрим ниже на таблицу с операторами сравнения.
Теперь рассмотрим операторы на примерах:
Логические операторы PHP
Бывают случаи, когда нужно сравнить не одну переменную, а сразу две и более в одном условии. Для этого существуют логические операторы.
Уже обратили внимание, что для операций и и или есть дополнительные операторы? Так сделано для того, чтобы расставить приоритеты в сложных операциях сравнения. В таблице логические операторы приведены в порядке приоритета: от меньшего к большему, то есть, например, || имеет больший приоритет, чем or.
Переходим к примерам
Тернарный оператор
К вопросу тернарного кода я предлагаю Вам вернуться позже. Вовсе не упомянуть его я не мог, так как это важная конструкция, которая существенно сокращает размер кода. Предлагаю сразу рассмотреть код.
Суть кода: (условие) ? значение a если true : значение a если false
Таким образом, мы сокращаем запись оператора if. Однако, данная операция действительна только с присваиванием значений переменной. Теперь давайте рассмотрим готовый пример.
Прочитайте комментарии к коду и всё должно быть понятно.
Спасибо за внимание!
tradebenefit.ru
Description
The if statement execute a single statement or a group of statements if a certain condition is met. It can not do anything if the condition is false. For this purpose else is used.
Syntax:
Example :
As we have initialized the $overtime value as 60, therefore the else statement will be executed.
View the example in the browser
PHP: elseif statement
Description:
elseif is a combination of if and else. It extends an if statement to execute a single statement or a group of statements if a certain condition is met. It can not do anything if the condition is false.
The following example display ‘x is greater than y’, ‘x is equal to y’ or ‘x is smaller than y’ depends on the value of $x or $y.
Example :
PHP: else statement
Description:
The if statement execute a single statement or a group of statements if a certain condition is met. It can not do anything if the condition is false. For this purpose else is used.
Syntax:
Example:
As we have initialized the $overtime value as 60, therefore the else statement will be executed.
View the example in the browser
PHP: elseif statement
Description:
elseif is a combination of if and else. It extends an if statement to execute a single statement or a group of statements if a certain condition is met. It can not do anything if the condition is false.
The following example display ‘x is greater than y’, ‘x is equal to y’ or ‘x is smaller than y’ depends on the value of $x or $y.
Example :
w3resource.com
Там некоторые шутки и вводящие в заблуждение комментарии, даже частично некорректная информация в ответах здесь. Я хотел бы попытаться улучшить их:
Первый, как указывали некоторые, у вас есть ошибка в коде, относящаяся к вопросу:
должен быть (обратите внимание на
==
вместо=
в первой части):который в этом случае функционально эквивалентен
Второй, обратите внимание, что эти операторы (
and or && ||
) являются операторами короткого замыкания. Это означает, что если ответ можно определить с уверенностью из первого выражения, второй никогда не будет оценен. Опять же это не имеет значения для вашей отлаженной строки выше, но это чрезвычайно важно, когда вы объединяете эти операторы с назначением, потому чтоТретий, реальная разница между
and or
и&& ||
является их приоритетом оператора. В частности, важно, чтобы&& ||
имели более высокий приоритет, чем операторы присваивания (= += -= *= **= /= .= %= &= |= ^= <<= >>=
), аand or
имели более низкую точность, чем операторы присваивания. Таким образом, в заявлении, которое сочетает использование присваивания и логической оценки, важно, какой из них выбрать.Модифицированные примеры из Страница PHP для логических операторов:
будет оценивать до
true
и присваивать это значение$e
, потому что||
имеет более высокий приоритет оператора, чем=
, и поэтому он по существу оценивает следующее:Однако
назначит
false
на$e
(а затем выполнит операциюor
и оценитtrue
), поскольку=
имеет более высокий приоритет оператора, чемor
, по существу оценивая следующим образом:Тот факт, что эта двусмысленность даже существует, позволяет многим программистам всегда использовать
&& ||
, а затем все работает четко, как можно было бы ожидать на языке, таком как C, т.е. сначала логические операции, затем назначение.Некоторые языки, такие как Perl, используют эту конструкцию часто в формате, подобном этому:
Это теоретически присваивало бы соединение с базой данных
$connection
, или если это не сработало (и мы предполагаем, что здесь функция вернет значение, которое в этом случае будет иметь значениеfalse
), оно закончит script с помощью сообщение об ошибке. Из-за короткого замыкания, если соединение с базой данных завершается успешно,die()
никогда не оценивается.Некоторые языки, допускающие эту конструкцию, прямо запрещают присвоения в условных/логических операциях (например, Python), чтобы устранить смещение в обратном направлении.
PHP пошел, разрешив оба, поэтому вам просто нужно узнать о ваших двух вариантах один раз, а затем код, как вы хотите, но, надеюсь, вы будете так или иначе согласованы.
Всякий раз, когда вы сомневаетесь, просто добавьте лишний набор скобок, который удаляет всю двусмысленность. Они всегда будут одинаковыми:
Вооружившись всеми этими знаниями, я предпочитаю использовать
and or
, потому что я чувствую, что он делает код более читаемым. У меня просто есть правило не комбинировать назначения с логическими оценками. Но в этот момент это просто предпочтение, и последовательность здесь намного важнее, чем какая вы выбираете.qaru.site
Лучшие статьи читаем: