Есть ли разница между троичным оператором и условием if? - PullRequest
3 голосов
/ 13 мая 2011

Есть ли разница между тернарным оператором и если условие в php?

, если да, просьба предоставить.

Ответы [ 6 ]

10 голосов
/ 13 мая 2011

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

Например: $status = $age > 18 ? 'adult' : 'child';

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

Структура управления if - это нечто совершенно иное.Единственное, что у них общего, так это то, что оба оценивают условие (true / false).if используется для выполнения фрагментов кода на основе результата этого условия.Большую часть времени вы обнаружите, что используете if (фактически вы можете жить без троичного).В определенных ситуациях код становится менее читабельным и более читаемым, если заменить некоторые типы if на троичные, как этот:

if ($age > 18) {
    $status = 'adult';
} else {
    $status = 'child';
}
1 голос
/ 22 марта 2018

Если операторы быстрее, чем троичные, но в большинстве случаев это не имеет значения.

Здесь - сообщение о выполнении операторов If против троичных.Резюме: Это в основном то же самое, если вы не оцениваете большие объекты, потому что троичные копии копируют оцениваемые объекты.Это было с использованием PHP 5.3 Я не уверен, что он был изменен в текущих версиях.

1 голос
/ 13 мая 2011

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

 $value = ($a < 0) ? 'minus' : 'plus';

, также вы можете увидеть один интересный вопрос, как работает несколько троичных:

необычная троичная операция

0 голосов
/ 20 марта 2013

Существует большая разница в обслуживании, если вы не используете никакой тривиальной логики.

Если у вас есть трудная проблема, вам нужно в обстоятельствах гораздо больше времени, чтобы решить ее, как если бы у вас было «если».тогда в твоем кодеИ будь уверен: это случилось!

Время не дружит с троичным оператором.Быстро написать, но не быстро понять, если прошли годы!

0 голосов
/ 13 мая 2011

Может быть, другая точка зрения: производительность.

Некоторое время назад я заметил, что троичный оператор работает быстрее, чем if (). Я не знаю, относится ли это к последним версиям PHP.

<дикое предположение>
Причина может заключаться в том, что if () обеспечивает большую гибкость, например, использование блоков кода ({ }). В основном, троичный оператор просто проверяет выражение и получает значение в зависимости от результата теста.

Возвращаясь к моим дням на ассемблере, я бы сказал, что if () должен прыгнуть в память и, следовательно, требует немного больше времени, чтобы что-то делать.
</ wild догадка>

Однако, это может стать заметным, только если код выполняется приличное количество раз (1k +).

0 голосов
/ 13 мая 2011

Тернарный оператор может делать все, что может оператор if / else. В некоторых случаях это может обеспечить краткость и выразительность, но будьте осторожны: им легко злоупотреблять.

Мне нравится проверка на нуль:

$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 ) );

Используйте с осторожностью.

...