Существует ли разница между тернарным оператором и условием в php?
если да, любезно предоставите.
Тернарный оператор является оператором , поэтому он формирует выражение. Таким образом, он будет иметь значение, которое вы можете назначить переменной или использовать, как хотите. Он используется для простых ситуаций, когда переменная может принимать два возможных значения в зависимости от условия.
Например: $status = $age > 18 ? 'adult' : 'child';
$status = $age > 18 ? 'adult' : 'child';
Хотя возможно, вы не должны вставлять тернарный оператор .
Структура управления, if
что-то совсем другое. Единственное, что у них есть общее, что оба оценивают условие (true / false). if
используется для выполнения фрагментов кода на основе результата этого условия. Вы будете использовать, if
большую часть времени (фактически, вы можете жить без тройного). В некоторых ситуациях это меньше кода и более читаемо, если вы заменяете некоторые типы if
s тройным, как этот:
if ($age > 18) { $status = 'adult'; } else { $status = 'child'; }
Лично я использую только тернарный оператор, если он вписывается в одну строку. Если это необходимо, то пришло время для старого
$value = ($a < 0) ? 'minus' : 'plus';
также вы можете увидеть один интересный вопрос о том, как несколько тройных работ:
Тернарный оператор может делать все, что может сделать оператор if / else. В некоторых случаях он может обеспечить краткость и выразительность, но будьте осторожны: его легко злоупотребляют.
Единственное, что мне нравится, это проверка на null:
$foo = (is_null($bar)) ? 0 : $bar->someNumber();
Если моя память PHP служит мне правильно, то она также может использоваться на lvalue:
((is_null($foo)) ? $bar : $foo) = $quux;
Его можно легко переусердствовать, например, в этом примере на C ++, где он используется вместо циклов и операторов if / else:
while( ( ! printingStars) ? ( ( ! reachedMax) ? ( ( ++numberOfStars == n - 1) && (reachedMax = 1) ) : --numberOfStars ), printingStars = 1, starsLeft = numberOfStars : ( ( ! starsLeft ) ? printingStars = 0, (std::cout<< std::endl), 1 : --starsLeft, (std::cout<< "*"), 1 ) );
Используйте с осторожностью.
Возможно, другая точка зрения: производительность.
Некоторое время назад я заметил, что тернарный оператор быстрее, чем if (). Я не знаю, относится ли это к последним версиям PHP.
<wild guess>
Причина может заключаться в том, что if () обеспечивает большую гибкость, например, использование кодовых блоков ( { }
). Тернарный оператор в основном просто тестирует выражение и захватывает значение в зависимости от результата теста.
Возвращаясь к моим сессиям Ассемблера, я бы сказал, что if () должен прыгать в память и, следовательно, занимает немного больше времени, чтобы что-то делать.
</ wild guess>
Однако это может стать заметным только в том случае, если код выполнен достойным числом (1k +) раз.
Существует большая разница в обслуживании, если вы не используете тривиальную логику.
Если у вас есть трудная проблема, вам нужно в гораздо более продолжительных случаях, чтобы это сделать, как будто у вас есть «if … then» в вашем коде. И будьте уверены: это происходит!
Время не является другом тернарного оператора. Быстро писать, но не быстро понять, если годы ушли!