Ответ 1
Нет... тройной означает три части, вам нужно условие, истинную часть и ложную часть
У меня есть строка, которую я хочу добавить в нее еще одну строку. скажем:
$my_string = 'Hello';
$my_string .= ' there';
это вернет 'Hello there'.
Я хочу сделать это условно следующим образом:
$my_string = 'Hello';
$append = 'do';
if ( $append == 'do' ) {
$my_string .= ' there';
}
Теперь я хочу использовать тройную операцию для этого, но все примеры, с которыми я столкнулся, - это, если /else будет что-то вроде:
$my_string .= ( $append == 'do' ) ? ' there' : '';
можно ли это сделать только с IF и без других?
Спасибо.
Нет... тройной означает три части, вам нужно условие, истинную часть и ложную часть
Неа. Однако возможно и обратное. Здесь цитата из документов PHP:
С PHP 5.3 можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.
объединение mellamokb и Andz вы можете сделать это:
( $append != 'do' ) ?: $my_string .= ' there';
Вы можете сделать это:
( $append == 'do' ) ? $my_string .= ' there' : $noop ;
Если вы инвертируете инструкцию так, чтобы тройка была снаружи, а не внутри задания, тогда вы можете поместить весь оператор в TRUE-часть, а затем просто сделать что-то, что является командой no-operation в ELSE часть.
Альтернативный способ проверить условие и затем добавить к строке:
($append == 'do') and ($my_string .= ' there');
Но это действительно просто смещение if
. Но приближается к "тройной без остального".
Если вы планируете сделать код короче, вы можете написать одно и то же в одной строке.
if ($append == 'do') {$my_string .= ' there';}
ИЗМЕНИТЬ
Я только что открыл это и подумал, что это пригодится. Вы также можете записать блок if, подобный этому
if ($append == 'do') $my_string .= ' there';
Вы можете создать функцию, которая сделает то, что вы хотите. Вместо того чтобы записывать инструкцию if
каждый раз.
function doAppend($doIt, &$value, $appendValue)
{
if($doIt) $value .= $appendValue;
}
Позвоните по следующему адресу:
doAppend($append == 'do', $my_string, ' there');
Обратите внимание, как второй параметр является ссылкой, поэтому он также будет изменен в вызывающем коде.
Вы не можете использовать тернар без части else/false, но если ваша цель состоит в том, чтобы иметь все на одной строке, я мог бы предложить попробовать эту альтернативу:
($append == 'do' && $my_string .= ' there');
Если первое верно, оно будет продолжено с помощью второго оператора. В противном случае будет остановлен только после того, как первая оценка приведет к ошибке.
Обратитесь к ленивой оценке (так называемая оценка короткого замыкания)
Или вы можете сделать обратное, оставив истинную часть if пустой и объявите только ложную, как указывает Andz.