Тернарная условная операция или как часто любят говорить краткая запись if может принести много беды, если не понимать некоторых тонкостей.
Синтаксис следующий
Синтаксис:
expression ? true_value : false_value
Выполнение этой инструкции начинается с операнда
expression
. Если значение выражения expression
истинно (true), то возвращается значение выражения true_value
, иначе возвращается false_value
.Вроде все ясно.
Например, если в $id нам передается номер статьи, то используем его, если нет, то перевод на первую новость.
Как это будет выглядеть
$id = '1212'; $id = empty($id) ? $id : 1;
Однако все не так просто. Что если передадут в id буквы?
$id = 'asdas'; $id = empty($id) ? $id : 1; // выведет asdas
Заюзаем проверку на число
$id = is_numeric($id) ? $id : 1;
Но и тут, можно передать отрицательное число, что не есть хорошо, или 001, что может привести к проблемам в некоторых случаях, тогда запишем так
$id = is_numeric($id) && $id>0 ? (int)$id : 1;
Но мы можем развернуть эту схему в классический if else, т.е. сделать записать в одном из операндов выражение.
<?php $id = 'sfg'; is_numeric($id) && $id>0 ? $id=(int)$id : $id=1; echo $id;
Идентично
if (is_numeric($id) && $id>0){ $id=(int)$id; }else{ $id=1; }
Путаница для новичков возникает при первом просмотре примерно такого выражения, когда, вроде как переменной идет присвоение какого то выражения, а на выходе получаем совсем другое.
<?php $id = '21'; $id = (is_numeric($id) && $id>0) && $id!=1 ? (int)$id : 1; echo $id;