Если значение меньше php

10php Операторы сравнения

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

Операторы сравнения

Пример Название Результат
$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 Меньше или равно true если $a меньше или равно $b .
$a >= $b Больше или равно true если $a больше или равно $b .
$a $b Космический корабль (spaceship) Число типа int меньше, больше или равное нулю, когда $a соответственно меньше, больше или равно $b .

В случае, если оба операнда являются строками, содержащими числа или один операнд является числом, а другой — строкой, содержащей числа, то сравнение выполняется численно. Эти правила также применяются к оператору switch. Преобразование типа не происходит при сравнении === или !== , поскольку это включает сравнение типа, а также значения.

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

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

bool(true) bool(true) bool(true) bool(true) 0

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

bool(false) bool(true) bool(true) bool(true) a

// Числа с плавающей точкой
echo 1.5 1.5; // 0
echo 1.5 2.5; // -1
echo 2.5 1.5; // 1

// Строки
echo «a» «a»; // 0
echo «a» «b»; // -1
echo «b» «a»; // 1

echo «a» «aa»; // -1
echo «zz» «aa»; // 1

// Массивы
echo [] []; // 0
echo [1, 2, 3] [1, 2, 3]; // 0
echo [1, 2, 3] []; // 1
echo [1, 2, 3] [1, 2, 1]; // 1
echo [1, 2, 3] [1, 2, 4]; // -1

// Объекты
$a = (object) [«a» => «b»];
$b = (object) [«a» => «b»];
echo $a $b; // 0

$a = (object) [«a» => «b»];
$b = (object) [«a» => «c»];
echo $a $b; // -1

$a = (object) [«a» => «c»];
$b = (object) [«a» => «b»];
echo $a $b; // 1

// сравниваются не только значения; ключи также должны совпадать
$a = (object) [«a» => «b»];
$b = (object) [«b» => «b»];
echo $a $b; // 1

Для различных типов сравнение происходит в соответствии со следующей таблицей (по порядку).

Сравнение различных типов

Тип операнда 1 Тип операнда 2 Результат
null или string string null преобразуется в «», числовое или лексическое сравнение
bool или null что угодно Преобразуется в тип bool , false < true
object object Встроенные классы могут определять свои собственные правила сравнения, объекты разных классов не сравниваются, про сравнение объектов одного класса смотрите Сравнение объекта
string , resource , int или float string , resource , int или float Строки и ресурсы переводятся в числа, обычная математика
array array Массивы с меньшим числом элементов считаются меньше, если ключ из первого операнда не найден во втором операнде — массивы не могут сравниваться, иначе идёт сравнение соответствующих значений (смотрите пример ниже)
array что угодно тип array всегда больше
object что угодно тип object всегда больше

Пример #1 Сравнение boolean/null

// Логические значения и null всегда сравниваются как логические
var_dump(1 == TRUE); // TRUE — то же, что и (bool)1 == TRUE
var_dump(0 == FALSE); // TRUE — то же, что и (bool)0 == FALSE
var_dump(100 < TRUE); // FALSE - то же, что и (bool)100 < TRUE
var_dump(-10 < FALSE);// FALSE - то же, что и (bool)-10 < FALSE
var_dump(min(-100, -10, NULL, 10, 100)); // NULL — (bool)NULL < (bool)-100 это FALSE < TRUE
?>

Пример #2 Алгоритм сравнения обычных массивов

// Массивы сравниваются таким образом с помощью стандартных операторов сравнения, а также оператора spaceship.
function standard_array_compare($op1, $op2)
if (count($op1) < count($op2)) return -1; // $op1 < $op2
> elseif (count($op1) > count($op2)) return 1; // $op1 > $op2
>
foreach ($op1 as $key => $val) if (!array_key_exists($key, $op2)) return 1;
> elseif ($val < $op2[$key]) return -1;
> elseif ($val > $op2[$key]) return 1;
>
>
return 0; // $op1 == $op2
>
?>

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

Из-за особого внутреннего представления типа float , не нужно проверять на равенство два числа с плавающей точкой ( float ).

Для более подробной информации смотрите документацию по типу float .

Замечание: Помните, что жонглирование типами в PHP не всегда очевидно при сравнении значений разных типов, особенно при сравнении целых чисел ( int ) с логическими значениями ( bool ) или целых чисел ( int ) со строками ( string ). Поэтому в большинстве случаев рекомендуется использовать сравнения === и !== , а не == и != .

Несравнимые значение ¶

В то время как сравнение тождества ( === и !== ) можно применять к произвольным значениям, другие операторы сравнения следует применять только к сравнимым значениям. Результат сравнения несравнимых значений не определён и на него не следует полагаться.

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

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

Ещё одним условным оператором является тернарный оператор «?:».

Пример #3 Присваивание значения по умолчанию

// Пример использования тернарного оператора
$action = (empty($_POST[‘action’])) ? ‘default’ : $_POST[‘action’];

// Приведённый выше код аналогичен следующему блоку с использованием if/else
if (empty($_POST[‘action’])) $action = ‘default’;
> else $action = $_POST[‘action’];
>
?>

Выражение (expr1) ? (expr2) : (expr3) интерпретируется как expr2 , если expr1 имеет значение true , или как expr3 , если expr1 имеет значение false .

Также стало возможным не писать среднюю часть тернарного оператора. Выражение expr1 ?: expr3 оценивается как результат expr1 , если результат выражения expr1 оценивается как true и expr3 в противном случае. Выражение expr1 в этом случае оценивается только один раз.

Замечание: Обратите внимание, что тернарный оператор является выражением и трактуется не как переменная, а как результат выражения. Это важно знать, если вы хотите вернуть переменную по ссылке. Выражение return $var == 42 ? $a : $b; не будет работать в функции, возвращающей значение по ссылке, а в более поздних версиях PHP также будет выдано предупреждение.

Замечание:

Рекомендуется избегать «нагромождения» тернарных выражений. Поведение PHP неочевидно при использовании более чем одного тернарного оператора без скобок в одном выражении по сравнению с другими языками. Действительно, до PHP 8.0.0 троичные выражения оценивались лево-ассоциативными, а не право-ассоциативными, как в большинстве других языков программирования. Использование лево-ассоциативности устарело в PHP 7.4.0. Начиная с PHP 8.0.0, тернарный оператор неассоциативен.

Пример #4 Неочевидное поведение тернарного оператора

// на первый взгляд, следующий код должен вывести ‘true’
echo (true ? ‘true’ : false ? ‘t’ : ‘f’);

// однако, он выводит ‘t’ до PHP 8.0.0
// это потому, что тернарные выражения левоассоциативны

// это намного более очевидная версия вышеприведённого кода
echo ((true ? ‘true’ : false) ? ‘t’ : ‘f’);

// здесь видно, что первое выражение вычисляется в ‘true’, которое
// в свою очередь вычисляется в (bool)true, таким образом возвращая истинную ветвь
// второго тернарного выражения.
?>

Замечание:

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

Пример #5 Цепочка коротких тернарных операторов

echo 0 ?: 1 ?: 2 ?: 3, PHP_EOL; //1
echo 0 ?: 0 ?: 2 ?: 3, PHP_EOL; //2
echo 0 ?: 0 ?: 0 ?: 3, PHP_EOL; //3
?>

Оператор объединения с null ¶

Другим полезным сокращённым оператором является оператор «??» (null coalescing).

Пример #6 Присваивание значения по умолчанию

// Пример выше аналогичен следующему коду
if (isset($_POST[‘action’])) $action = $_POST[‘action’];
> else $action = ‘default’;
>
?>

Выражение (expr1) ?? (expr2) вычисляется так: expr2 , если expr1 равен null и expr1 в противном случае.

На практике, этот оператор не вызывает предупреждения или ошибки, если левый операнд не существует, как и isset() . Это очень полезно для ключей массива.

Замечание: Пожалуйста помните, что этот оператор является выражением, и он приравнивается к выражению, а не значению переменной. Это может быть важным, если вы хотите вернуть значение по ссылке. Выражение return $foo ?? $bar; в функции возвращающей ссылку будет не работать, а выводить предупреждение.

Замечание:

У оператора null coalescing низкий приоритет. Это означает, что при смешивании его с другими операторами (такими как конкатенация строк или арифметические операторы), скорее всего, потребуются круглые скобки.

// Вызывает предупреждение о том, что $name не определено.
print ‘Mr. ‘ . $name ?? ‘Anonymous’;
// Выведет «Mr. Anonymous»
print ‘Mr. ‘ . ($name ?? ‘Anonymous’);
?>

Замечание:

Обратите внимание, что этот оператор позволяет использовать простую вложенность:

Пример #7 Вложенный оператор null coalescing

$foo = null;
$bar = null;
$baz = 1;
$qux = 2;

echo $foo ?? $bar ?? $baz ?? $qux; // выведет 1

?>

Источник

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

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

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

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

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

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

Оператор if в PHP

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

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

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

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

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

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

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

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

if(условие) < // Код, который будет выполнен, если условие истинно >elseif(условие) < // Код, который будет выполнен, если условие истинно >else< // Код, который будет выполнен, если условие ложно >

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

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

Тернарный оператор предоставляет сокращенный способ написания операторов 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 »

Дайте знать, что вы думаете по данной теме материала в комментариях. Мы очень благодарим вас за ваши комментарии, отклики, подписки, лайки, дизлайки!

Источник

Читайте также:  Multibyte strings php extension mbstring
Оцените статью