Sdscompany.ru

Компьютерный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php if in

Операторы PHP if . else

В этой статье мы расскажем, как использовать операторы if … else … и elseif PHP .

Условные операторы PHP

В PHP есть несколько операторов, которые можно использовать для принятия решений:

  • Оператор if ;
  • Оператор if … else ;
  • Оператор if … elseif …. else ;
  • Оператор switch … case .

Ниже мы рассмотрим каждый из этих операторов.

Оператор if

Оператор if ( как и PHP elseif ) используется для выполнения блока кода только в том случае, если указанное условие имеет значение true . Это простейший условный оператор PHP , его можно записать следующим образом:

Приведенный ниже код выводит « Хорошего уик-энда! », если сегодня пятница:

Оператор if … else

Можно усложнить процесс принятия решений, предоставив альтернативный вариант. Для этого к if нужно добавить оператор else . Оператор if … else позволяет выполнить один блок кода, если указанное условие оценивается как true , а другой блок кода, если false .

Его можно записать следующим образом:

Приведенный ниже код выводит « Хорошего уик-энда! », если сегодня пятница. Иначе выводиться « Хорошего дня! ».

Оператор if … elseif … else

if…elseif…else оператор ( не путать с PHP elseif else ) используется для объединения нескольких операторов if … else .

Приведенный ниже код выводит « Хорошего уик-энда! », если сегодня пятница или «Хорошего воскресенья!» если сегодня воскресенье. В противном случае будет выводиться « Хорошего дня! ».

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

Тернарный оператор предоставляет сокращенный способ написания операторов if … else и elseif PHP . Тернарный оператор обозначается символом вопросительного знака ( ? ). Он принимает три операнда: условие для проверки, результат для true и результат для false .

Чтобы понять, как работает этот оператор, рассмотрим следующие примеры:

Используя тернарный оператор, тот же код можно записать более компактно:

Тернарный оператор в приведенном выше примере выбирает значение слева от двоеточия ( т. е. «Ребенок» ), если условие оценивается как true ( т. е. если $age меньше 18 ) и значение справа от двоеточия ( т.е. «Взрослый» ), если условие оценивается как false .

Примечание . Код, написанный с использованием тернарного оператора, может быть трудно читаемым. Тем не менее, он предоставляет способ компактной записи операторов if-else и PHP elseif .

Оператор нулевого коалесцирования в PHP7

В PHP 7 был введен новый оператор нулевого коалесцирования ( ?? ), который можно использовать в качестве сокращенного обозначения тройного оператора в сочетании с функцией isset() .

Чтобы лучше понять, как это работает, рассмотрим приведенный ниже код. Он извлекает значение $_GET[‘имя’] . Если оно не существует или равно NULL , возвращается ‘ anonymous ‘.

Используя оператор нулевого коалесцирования вместо PHP elseif примера, этот же код можно записать в следующем виде:

Второй вариант синтаксиса является более компактным и простым в написании.

Данная публикация представляет собой перевод статьи « PHP If…Else Statements » , подготовленной дружной командой проекта Интернет-технологии.ру

13 неожиданностей в PHP, о которых знают не все

Казалось бы, все знаешь, пишешь себе функции, используешь операторы и получаются у тебя крутые, быстрые и понятные конструкции кода, классы, например. Но в какой-то момент внезапно нарываешься на ситуацию, когда код работает так, как нужно ему, а не как ожидаешь ты и все это как-будто вопреки здравому смыслу. Но код никогда не ошибается.

Ниже поговорим про интересные и неожиданные, неочевидные и особенные случаи в PHP.

explode() в 2 раза быстрее unserialize()

Если для сохраняемых чисел не важен тип (число), лучше хранить числа через запятую, чем их же сериализовать.

isset() в 2 раза быстрее in_array()

Скорости очень быстрые, но если обрабатываются большие массивы, то есть смысл заюзать array_flip() и искать значение через isset() :

PHP язык без строгой типизации и потому иногда могут возникать неожиданные результаты при сравнении (проверке) разных значений.

Происходит так очевидно, потому что ‘строка’ превращается в ноль: intval( ‘строка’ ) = 0 , а 0 == 0 это true, разумеется.

Так например можно пропустить переменную запроса:

Все следующие значения одинаковы, при сравнении через == (не строгий оператор сравнения):

in_array() нас обманывает

Вы мастер массивов в PHP. Вы уже знаете все о создании, редактировании и удалении массивов. Тем не менее, следующий пример может вас удивить.

Часто при работаете с массивами приходится в них что-либо искать с помощью in_array() .

Как думаете выведет этот пример надпись «Неужто нашлось»? После такого вопроса, вы наверняка решили что условие сработает, но при написании кода, скорее всего было бы наоборот — и вы бы решили что условие не сработает На самом деле, это условие сработает и код выведет надпись «Неужто нашлось».

Так происходит, потому что PHP язык бестиповой и in_array() в данном случае сравнивает значения, но не учитывает тип, т.е. использует оператор == , а не === . А ‘строка’ == true даст нам true. Вот и получается что in_array() лжёт!

Решение

Чтобы избежать такого «обмана», нужно указать true в третий параметр в in_array() , так все сравнения будут проходить с учетом типа значения.

Разница между PHP операторами OR и || , AND и &&

PHP операторы OR , AND и || , && соответственно, отличаются приоритетами выполнения. У последних он выше, поэтому они будут выполняться раньше.

Если сравнивать с оператором присваивания: = , то OR/AND будут выполняться ПОСЛЕ оператора присваивания, в то время как у || и && будут выполняться ДО оператора присваивания, из за более высокого приоритета. Рассмотрим эту разницу на примере:

AND и &&

Полезная ссылка по этой теме: Приоритет оператора

Шунтирующие операторы (короткая запись)

При сравнении типа AND && , если первое условие вернет false/0/»/array() , то нет смысла проверять следующие условия, потому что всё условие выполнится только если сразу все вложенные условия вернут что-либо отличное от empty (не false).

При сравнении типа OR || , если хоть одно условие вернет true или что-то отличное от empty, то нет смысла проверять следующие вложенные условия, потому что все условие выполняется когда хоть одно под-условие возвращает не false.

count() не всегда дает ожидаемый результат

Все мы привыкли проверять наличие значения в массиве через isset() . Однако если элемент в массиве есть, но его значение null, то isset() вернет false, как если бы элемента в массиве не было.

Наличие элемента со значением null можно проверить функцией array_key_exists() .

Странное поведение в PHP при передаче значения foreach по ссылке

Мы дважды проводим итерацию по массиву, ничего не делая. Так что в результате никаких изменений не должно быть. Правильно? — Неправильно!

Чтобы не ловить такие баги, при передаче по ссылке значения в foreach, указывайте уникальное значение переменной $val или очищайте $val после foreach с помощью unset($val) .

Почему так происходит отлично объясняется тут.

empty() и объекты

Проверка empty() на объектах может вести себя странно. Допустим у нас есть некий объект $obj и мы проверяем пусто ли свойство var , и получаем такое:

Парадокс! Как такое может быть? empty() говорит что свойство пустое, а ! говорит что в нем что-то есть. Как одно и тоже свойство может быть пустым и не пустым одновременно? Квантовая суперпозиция господа.

Однако если разобраться, то нет тут ничего удивительного и все логично!

Дело в том, что конструкция empty() обращается к встроенному методу объекта __isset() , а прямой запрос свойства ($obj->var) обратиться к __get() .

Т.е. получается empty() и ! запрашивают разные методы, если свойство не установлено:

А теперь, зададим значение свойства bar в __isset() и empty() его получит:

Имеет большое значение в каком положении использовать ++ (инкремент, увеличитель).

++$i — увеличивает $i на 1, сразу — при текущем вызове $i .
$i++ — увеличит $i на 1, при следующем вызове $i .

— — уменьшитель (декремент) работает точно также.

Повторим еще раз:

С числами все довольно просто, но что будет если инкрементить строки?

Что выведет данный код?

При инкременте строки, PHP увеличивает последний символ на символ следующий по алфавиту. И если в конце 2, то следующий символ будет 3. После t следует u. Однако эта операция не имеет никакого смысла в случае, когда строка заканчивается на не буквенно-численный символ.

Этот момент хорошо описан в официальной документации по операциям инкремента/декремента, однако многие не читали этот материал, потому что не ожидали встретить там ничего особенного.

Читать еще:  Data content html

Неточности с плавающей точкой

Посчитайте эту арифметику и скажите результат:

Сколько получилось, 8? А у компьютера 7!

Так происходит, потому что компьютеры не умеют хорошо работать с неточными числами — это как выясняется большая и старая проблема, есть даже статья на эту тему: «Что каждый компьютерщик должен знать об операциях с плавающей точкой».

Что получается в итоге и где ошибка?

Однако, если посчитать так, то увидим 0.8, а не 0.79999999999. Хотя этот результат является лишь округлением:

Какой вывод можно сделать из этого примера? Будьте очень осторожны, когда дело касается дробных чисел (чисел с плавающей точкой) и никогда им не доверяйте.

Для складываний и вычитаний флоат чисел в PHP есть спец. фукцнии: bcadd() , bcsub() . Например:

Все объекты в PHP передаются по ссылке

Это свойство объектов вам возможно известно, но даже в этом случае можно поймать баг, поэтому при работе с объектами будьте внимательны.

Для примера, давайте рассмотрим такой код, когда мы используем объект для удобства, который создается из массива:

Мы создали казалось бы общие данные, который потом планируем использовать в разных переменных, меняя данные объекта где нужно, а где не нужно оставляя исходный вариант. В этом случае изменение данных будет менять их и в исходном варианте.

Так, например, если использовать массив, то все будет работать как мы ожидаем. Тот же код но с массивом:

Поэтому чтобы первый вариант работал правильно, в переменную нужно передавать копию объекта, создаваемую с помощью clone :

При сложении массивов элементы добавляемого массива не заменяют исходные, как это часто ожидается.

Изменение типа данных в ключах массива

При создании индекса массива PHP автоматически преобразовывает тип данных. Это надо учитывать, при работе с ассоциативными массивами. Так например, если в индекс передать число в виде строки (‘555’), то в индексе оно станет числом, или если в индекс передать true, то оно станет числом 1, а вот null превратиться в пустую строку. Пример кода см. ниже.

В массиве key может быть либо типа integer , либо типа string . value может быть любого типа.

Дополнительно с ключом key будут сделаны следующие преобразования:

  • Строки, содержащие целое число (исключая случаи, когда число предваряется знаком + ) будут преобразованы к типу integer . Например, ключ со значением «8» будет в действительности сохранен со значением 8. С другой стороны, значение «08» не будет преобразовано, так как оно не является корректным десятичным целым.
  • Числа с плавающей точкой (тип float ) также будут преобразованы к типу integer , то есть дробная часть будет отброшена. Например, ключ со значением 8.7 будет в действительности сохранен со значением 8 .
  • Тип bool также преобразовываются к типу integer . Например, ключ со значением true будет сохранен со значением 1 и ключ со значением false будет сохранен со значением 0.
  • Тип null будет преобразован к пустой строке. Например, ключ со значением null будет в действительности сохранен со значением «» .
    Массивы (тип array) и объекты (тип object) не могут использоваться в качестве ключей. При подобном использовании будет генерироваться предупреждение: Недопустимый тип смещения (Illegal offset type).
  • Если несколько элементов в объявлении массива используют одинаковый ключ, то только последний будет использоваться, а все другие будут перезаписаны.

Closure::call — вызов анонимной функции с указанием контекста

Это не столько неожиданность, сколько интересная особенность, о которой мало кто знает.

PHP замыкания (анонимные функции) можно вызывать передавая в них контекст (объект). В результате замыкание можно использовать как метод переданного объекта.

Для этого в объекте замыкания есть метод:

$that(object) Объект для привязки к замыканию на время его вызова. . $params Сколько угодно параметров, которые передаются в замыкание.

Пример того как это использовать

Что мы видим? При вызове одного и того же замыкания мы получаем разный результат, который зависит от контекста вызова (от того какой объект передается и используется в замыкании).

in_array

(PHP 4, PHP 5, PHP 7)

in_array — Проверяет, присутствует ли в массиве значение

Описание

Ищет в haystack значение needle . Если strict не установлен, то при поиске будет использовано нестрогое сравнение.

Список параметров

Замечание:

Если needle — строка, сравнение будет произведено с учетом регистра.

Если третий параметр strict установлен в TRUE , тогда функция in_array() также проверит соответствие типов параметра needle и соответствующего значения массива haystack .

Возвращаемые значения

Возвращает TRUE , если needle был найден в массиве, и FALSE в противном случае.

Примеры

Пример #1 Пример использования in_array()

Второго совпадения не будет, потому что in_array() регистрозависима, таким образом, программа выведет:

Пример #2 Пример использования in_array() с параметром strict

Результат выполнения данного примера:

Пример #3 Пример использования in_array() с массивом в качестве параметра needle

Результат выполнения данного примера:

Смотрите также

  • array_search() — Осуществляет поиск данного значения в массиве и возвращает ключ первого найденного элемента в случае удачи
  • isset() — Определяет, была ли установлена переменная значением, отличным от NULL
  • array_key_exists() — Проверяет, присутствует ли в массиве указанный ключ или индекс

User Contributed Notes 35 notes

Loose checking returns some crazy, counter-intuitive results when used with certain arrays. It is completely correct behaviour, due to PHP’s leniency on variable types, but in «real-life» is almost useless.

The solution is to use the strict checking option.

true ,
‘cheese’ => false ,
‘hair’ => 765 ,
‘goblins’ => null ,
‘ogres’ => ‘no ogres allowed in this array’
);

// Loose checking — return values are in comments

// First three make sense, last four do not

in_array ( null , $array ); // true
in_array ( false , $array ); // true
in_array ( 765 , $array ); // true
in_array ( 763 , $array ); // true
in_array ( ‘egg’ , $array ); // true
in_array ( ‘hhh’ , $array ); // true
in_array (array(), $array ); // true

in_array ( null , $array , true ); // true
in_array ( false , $array , true ); // true
in_array ( 765 , $array , true ); // true
in_array ( 763 , $array , true ); // false
in_array ( ‘egg’ , $array , true ); // false
in_array ( ‘hhh’ , $array , true ); // false
in_array (array(), $array , true ); // false

If you’re working with very large 2 dimensional arrays (eg 20,000+ elements) it’s much faster to do this.

I had a script that went from 30+ seconds down to 2 seconds (when hunting through a 50,000 element array 50,000 times).

Remember to only flip it once at the beginning of your code though!

= ini_get ( «xdebug.max_nesting_level» )) return false ;

foreach( $array as $key => $value ) <
$bool = $strict ? $element === $key : $element == $key ;

if( $bool ) return true ;

if( is_array ( $value )) <
$bool = self :: inMultiArray ( $element , $value , $strict );
> else <
$bool = $strict ? $element === $value : $element == $value ;
>

if( $bool ) return true ;
>

self :: $currentMultiArrayExec = 0 ;
return isset( $bool ) ? $bool : false ;
>
>

$array = array( «foo» => array( «foo2» , «bar» ));
$search = «foo» ;

if( Method :: inMultiArray ( $search , $array , false )) <
echo $search . » it is found in the array or one of its sub array.» ;
> else <
echo $search . » was not found.» ;
>

# foo it is found in the array or one of its sub array.

For a case-insensitive in_array(), you can use array_map() to avoid a foreach statement, e.g.:

in_array() may also return NULL if the second argument is NULL and strict types are off.

The output is NULL

If the strict mode is on, then this code would end up with the TypeError

Determine whether an object field matches needle.

colour = ‘red’ ;
$arr [ 1 ]-> colour = ‘green’ ;
$arr [ 1 ]-> state = ‘enabled’ ;

if ( in_array_field ( ‘red’ , ‘colour’ , $arr ))
echo ‘Item exists with colour red.’ ;
if ( in_array_field ( ‘magenta’ , ‘colour’ , $arr ))
echo ‘Item exists with colour magenta.’ ;
if ( in_array_field ( ‘enabled’ , ‘state’ , $arr ))
echo ‘Item exists with enabled state.’ ;
?>

Output:
———
Item exists with colour red.
Item exists with enabled state.

This code will search for a value in a multidimensional array with strings or numbers on keys.

function in_multiarray($elem, $array)
<
while (current($array) !== false) <
if (current($array) == $elem) <
return true;
> elseif (is_array(current($array))) <
if (in_multiarray($elem, current($array))) <
return true;
>
>
next($array);
>
return false;
>

Читать еще:  Is html anchor

If you found yourself in need of a multidimensional array in_array like function you can use the one below. Works in a fair amount of time

In a high-voted example, an array is given that contains, amongst other things, true, false and null, against which various variables are tested using in_array and loose checking.

It impossible to receive false as a return value from in_array using loose checking if your arrays contains both the constants true and false. You might understandably trip over this (or the inverse — passing boolean true to check against an array of e.g. non-empty strings), but it’s certainly not counter intuitive and makes perfect sense.

If you have an array like:
$arr = array(0,1,2,3,4,5);

in_array(NULL, $arr) returns true because you have 0 in your array. That is, in_array does not use === for equal check.

Recursive in array using SPL

Since sometimes in_array returns strange results — see notes above.
I was able to find value in array by this quite a simple function;
value to find
* $array array to search in
*/

function _value_in_array ( $array , $find ) <
$exists = FALSE ;
if(! is_array ( $array )) <
return;
>
foreach ( $array as $key => $value ) <
if( $find == $value ) <
$exists = TRUE ;
>
>
return $exists ;
>

// Note
// You can’t use wildcards and it does not check variable type
?>

I would like to add something to beingmrkenny at gmail dot com comparison post. After debugging a system, i discovered a security issue in our system and his post helped me find the problem.

In my additional testing i found out that not matter what you search for in an array, except for 0 and null, you get true as the result if the array contains true as the value.

Examples as php code :

y ];
var_dump ( in_array ( 25 , $a )); // true, one would expect false
var_dump ( in_array ( ‘ggg’ , $a )); // true, one would expect false

var_dump ( in_array ( 0 , $a )); // false
var_dump ( in_array ( null , $a )); // false
?>

Such the best practice in our case is to use strict mode. Which was not so obvious.

Beware when using this function to validate user input:

$a = array(‘0’ => ‘Opt 1’, ‘1’ => ‘Opt 2’, ‘2’ => ‘Opt 3’);
$v = ‘sql injection’;
var_dump(in_array($v, array_keys($a)));

This will result : true;

array_keys($a) will cast array keys to int instead of string !
then when in_array will compare it will cast ‘sql injection’ to int 0 !
Beware of this!

I found out that in_array will *not* find an associative array within a haystack of associative arrays in strict mode if the keys were not generated in the *same order*:

‘banana’ , ‘vegetable’ => ‘carrot’
);

$haystack = array(
array( ‘vegetable’ => ‘carrot’ , ‘fruit’ => ‘banana’ ),
array( ‘fruit’ => ‘apple’ , ‘vegetable’ => ‘celery’ )
);

echo in_array ( $needle , $haystack , true ) ? ‘true’ : ‘false’ ;
// Output is ‘false’

echo in_array ( $needle , $haystack ) ? ‘true’ : ‘false’ ;
// Output is ‘true’

I had wrongly assumed the order of the items in an associative array were irrelevant, regardless of whether ‘strict’ is TRUE or FALSE: The order is irrelevant *only* if not in strict mode.

If you’re creating an array yourself and then using in_array to search it, consider setting the keys of the array and using isset instead since it’s much faster.

‘apple’ , ‘banana’ => ‘banana’ , ‘orange’ => ‘orange’ );

if (isset( $fast [ ‘banana’ ]))
print( ‘Found it!’ );

In PHP array function the in_array() function mainly used to check the item are available or not in array.

in_array( ‘search_item’ , $array, boolean)

Where,
boolean — It is used to check strict validation. And this field is optional one. If you want the strict validation you can use this.

We using in_array() function to performing following following two function. That is ,

1. Non-strict validation
2. Strict validation

1. Non-strict validation:
This method to validate array with some negotiation. And it allow two parameters.

For example,
$array_sample = array ( ‘key1’ => 567 , ‘key2’ => 579);

in_array(‘key1’, $array_sample); // output1: true
in_array(‘577’, $array_sample, false); // output2: true

Note: the Example 1, we use only two parameter. Because we can’t mention `false` value. Because In default the in_array() take `false` as a boolean value.

In above example,
Example 1 : The `key1` is not value in the array. This is key of the array. So this scenario the in_array accept the search key as a value of the array.
Example 2: The value `577` is not in the value and key of the array. It is some similar to the value `579`. So this is also accepted.

So this reason this type is called non-strict function.

2. Strict validation
This method to validate array without any negotiation. And it have three parameters. If you only mention two parameter the `in_array()` function take as a non-strict validation.

For example,
$array_sample = array ( ‘key1’ => 567 , ‘key2’ => 579);

in_array(‘key1’, $array_sample , true); // output1: false
in_array(‘577’, $array_sample, true); // output2: false

This is return `true` only the search string is match exactly with the array value with case sensitivity.

Условия в PHP

Всем привет! Вот и очередной урок по PHP подоспел. Сегодняшняя тема – одна из самых любимых у тех, кто начинает программировать. Ещё бы, ведь условия в PHP – это то, что позволяет нам составлять различные алгоритмы. Именно в зависимости от условий программа будет вести себя так или иначе. И именно благодаря им мы можем получать разный результат при разных входных данных. В PHP имеются несколько конструкций, с помощью которых можно реализовать условия. Все они используются, и имеют свои преимущества в разных ситуациях, или, если хотите – условиях. Кругом одни условия, не так ли? Так. Никто ведь не будет спорить, что в реальной жизни в зависимости от обстоятельств мы поступаем по-разному. В программировании это не менее важно и сейчас мы этому научимся.

Как вы должны помнить из прошлого урока, в PHP, в зависимости от оператора, операнды приводятся к определённому типу. Для операторов условий в PHP действуют те же правила, и здесь операнд всегда приводится к булевому значению. В случае, если это значение true, то считаем, что условие выполнено, а в случае, если false – то условие не выполнено. В зависимости от того, выполнено ли условие, мы можем делать или не делать какие-либо действия. И тут я предлагаю рассмотреть первый условный оператор – if.

Условный оператор if

Это самый простой, и самый часто используемый оператор. В общем случае конструкция выглядит следующим образом:

А в реальной жизни использование оператора if выглядит следующим образом:

Здесь мы явно передали оператору значение true. Разумеется, это абсолютно бессмысленно. Давайте с помощью условия будем определять числа больше 10. Это довольно просто:

И после запуска мы увидим результат:

Конструкция if-else

А можно ли сделать так, чтобы, когда условие не выполнилось, выполнился другой код? Конечно можно! Для этого вместе с оператором if используют оператор else (по-русски — иначе). Он пишется после фигурных скобок, в которые заключается код, выполняющийся при выполненном условии. И выглядит конструкция следующим образом:

Здесь опять же на экран будет выведено сообщение:

Однако если мы изменим входные данные, и переменной $x в самом начале присвоим значение 8, то выведется сообщение:

Попробуйте сделать это прямо сейчас.

Конструкция if-elseif-else: несколько условий

В случае, если вам нужно проверить несколько условий, после оператора if добавляется ещё и оператор elseif. Он проверит условие, только если не выполнится первое условие. Например:

В данном случае, на экран будет выведено:

И да, после этого оператора можно добавить else. Код внутри него будет выполнен, если не выполнилось ни одно из условий:

Результат этого кода, я полагаю, объяснять не нужно. Да, кстати, возможен целый список из elseif-ов. Например, такой:

Приведение к boolean

Помните, в уроке про типы данных в PHP мы с вами научились явно приводить значения к какому-либо типу. Например:

Читать еще:  Ab57 ru cmdlist html

Результатом будет true.
Работающее так же, только неявное преобразование, всегда происходит в условии. Например, следующее условие:

Выполнится успешно, так как число 3 будет преобразовано к true. К false будут приводиться следующие значения:

Таким образом, любое ненулевое число и ненулевая строка будут преобразованы в true и условие выполнится. Исключение – строка, состоящая из одного нуля:

Она также будет преобразована к false.

Я затронул эту тему с приведением к boolean в домашнем задании к этому уроку. Обязательно его выполните. А сейчас давайте перейдём к следующему условному оператору.

Оператор switch

Помимо конструкции if-else есть ещё один оператор условия. Это – switch. Это очень интересный оператор, требующий запоминания нескольких правил. Давайте для начала посмотрим, как он выглядит на следующем примере:

Сначала может показаться, что этот оператор довольно сложный. Однако, если разобраться, то всё становится понятно. В операнде switch указывается некоторое выражение. В нашем случае, это переменная $x, а точнее её значение — 1.

В фигурных скобках мы перечисляем операторы case, после которых указываем значение, с которым сравнивается значение операнда switch. Сравнение происходит нестрогое, то есть как будто используем оператор ==. И если условие выполнилось, то выполняется код, указанный после двоеточия. Если же ни одно из условий не выполнилось, то выполняется код из секции default, которой в общем-то может и не быть, и тогда ничего выполняться не будет. Обратите внимание, внутри каждой секции case, в конце мы прописали оператор break. Это делается для того, чтобы после выполнения кода в случае выполнения условия не продолжилась проверка условий. То есть, если бы не было break в конце секции case 1, то после того, как вывелся бы текст

продолжило бы выполняться условие сравнения с 2, а затем бы выполнился и код в секции default. Не забывайте писать break!

Сравнение switch с if

Вообще, этот код можно было бы записать и с помощью конструкции if-elseif-else:

Но в виде конструкции switch-case код в конкретно этом случае выглядит проще. И вот почему:

  1. мы сразу видим, что конкретно мы сравниваем (переменную $x) и понимаем, что сравниваем в каждом условии именно это значение, а не какое-либо ещё;
  2. глазу удобнее воспринимать то, с чем сравниваем – секции case 1, case 2 визуально воспринимаются легче, сравниваемое значение заметнее.

И снова про switch

И я ещё не всё сказал про switch — можно писать несколько case-ов подряд, тогда код выполнится при условии, что выполнен хотя бы один из них. Например:

Согласитесь, это может быть удобно.

Хорошо, давайте пройдёмся по особенностям оператора switch, о которых нужно помнить всегда.

  1. break прерывает набор условий, не забывайте указывать его;
  2. секция default будет выполнена, если не выполнилось ни одно из условий. Она может и вовсе отсутствовать;
  3. несколько case-ов могуть быть записаны подряд, тогда код в секции выполнится при выполнении хотя бы одного из условий.

Немного практики

Ну что, запомнили операторы условий? Давайте закрепим на практике более реальными примерами.

Чётное или нечётное

Вот один из примеров – нужно определить, чётное ли число или нет. Для этого нам нужно проверить, что остаток от деления на 2 будет равен . Подробнее об операторах читайте тут. Давайте сделаем это:

Попробуйте самостоятельно изменить значение переменной $x. Круто, да? Оно работает!

Модуль

Давайте теперь научимся вычислять модуль числа. Если число больше или равно нулю, то нужно вывести само это число, если меньше – заменить знак с минуса на плюс.

Как мы видим, всё успешно отработало.

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

Помимо этого, в PHP есть ещё один оператор, который представляет собой сокращённую форму конструкции if-else. Это тернарный оператор. При этом он возвращает разные результаты, в зависимости от того, выполнено ли условие или нет. В общем виде его использование выглядит следующим образом:

Или на примере того же нахождения модуля:

Круто, да? Тернарный оператор – очень элегантно вписывается при решении таких вот простеньких задачек.

И ещё немного практики

Условия можно помещать внутрь друг друга и вообще, чего с ними только можно не делать. Например:

Друзья, надеюсь вам понравился урок. Если это так – буду рад, если вы поделитесь им в социальных сетях или расскажете друзьям. Это лучшая поддержка проекта. Спасибо тем, кто это делает. Если у вас возникли какие-то вопросы или замечания – напишите об этом в комментариях. А сейчас – все быстренько делаем домашнее задание, там ещё больше интересных примеров с условиями. Всем пока!

PHP If…Else Statements

In this tutorial you’ll learn how to write decision-making code using if. else. elseif statements in PHP.

PHP Conditional Statements

Like most programming languages, PHP also allows you to write code that perform different actions based on the results of a logical or comparative test conditions at run time. This means, you can create test conditions in the form of expressions that evaluates to either true or false and based on these results you can perform certain actions.

There are several statements in PHP that you can use to make decisions:

  • The if statement
  • The if. else statement
  • The if. elseif. else statement
  • The switch. case statement

We will explore each of these statements in the coming sections.

The if Statement

The if statement is used to execute a block of code only if the specified condition evaluates to true. This is the simplest PHP’s conditional statements and can be written like:

The following example will output «Have a nice weekend!» if the current day is Friday:

Example

The if. else Statement

You can enhance the decision making process by providing an alternative choice through adding an else statement to the if statement. The if. else statement allows you to execute one block of code if the specified condition is evaluates to true and another block of code if it is evaluates to false. It can be written, like this:

The following example will output «Have a nice weekend!» if the current day is Friday, otherwise it will output «Have a nice day!»

Example

The if. elseif. else Statement

The if. elseif. else a special statement that is used to combine multiple if. else statements.

The following example will output «Have a nice weekend!» if the current day is Friday, and «Have a nice Sunday!» if the current day is Sunday, otherwise it will output «Have a nice day!»

Example

You will learn about PHP switch-case statement in the next chapter.

The Ternary Operator

The ternary operator provides a shorthand way of writing the if. else statements. The ternary operator is represented by the question mark ( ? ) symbol and it takes three operands: a condition to check, a result for true , and a result for false .

To understand how this operator works, consider the following examples:

Example

Using the ternary operator the same code could be written in a more compact way:

Example

The ternary operator in the example above selects the value on the left of the colon (i.e. ‘Child’) if the condition evaluates to true (i.e. if $age is less than 18), and selects the value on the right of the colon (i.e. ‘Adult’) if the condition evaluates to false.

Tip: Code written using the ternary operator can be hard to read. However, it provides a great way to write compact if-else statements.

The Null Coalescing Operator PHP 7

PHP 7 introduces a new null coalescing operator ( ?? ) which you can use as a shorthand where you need to use a ternary operator in conjunction with isset() function.

To uderstand this in a better way consider the following line of code. It fetches the value of $_GET[‘name’] , if it does not exist or NULL , it returns ‘anonymous’.

Example

Using the null coalescing operator the same code could be written as:

Example

As you can see the later syntax is more compact and easy to write.

Ссылка на основную публикацию
Adblock
detector