PHP, если стенография

У меня есть строка, которую я хочу добавить в нее еще одну строку. скажем:

$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 и без других?

Спасибо.

Ответ 1

Нет... тройной означает три части, вам нужно условие, истинную часть и ложную часть

Ответ 2

Неа. Однако возможно и обратное. Здесь цитата из документов PHP:

С PHP 5.3 можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.

http://php.net/manual/en/language.operators.comparison.php

Ответ 3

объединение mellamokb и Andz вы можете сделать это:

( $append != 'do' ) ?: $my_string .= ' there';

Ответ 4

Вы можете сделать это:

( $append == 'do' ) ? $my_string .= ' there' : $noop ;

Если вы инвертируете инструкцию так, чтобы тройка была снаружи, а не внутри задания, тогда вы можете поместить весь оператор в TRUE-часть, а затем просто сделать что-то, что является командой no-operation в ELSE часть.

Ответ 5

Альтернативный способ проверить условие и затем добавить к строке:

 ($append == 'do')  and  ($my_string .= ' there');

Но это действительно просто смещение if. Но приближается к "тройной без остального".

Ответ 6

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

if ($append == 'do') {$my_string .= ' there';}

ИЗМЕНИТЬ

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

if ($append == 'do') $my_string .= ' there';

Ответ 7

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

function doAppend($doIt, &$value, $appendValue)
{
    if($doIt) $value .= $appendValue;
}

Позвоните по следующему адресу:

doAppend($append == 'do', $my_string, ' there');

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

Ответ 8

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

($append == 'do' && $my_string .= ' there');

Если первое верно, оно будет продолжено с помощью второго оператора. В противном случае будет остановлен только после того, как первая оценка приведет к ошибке.

Обратитесь к ленивой оценке (так называемая оценка короткого замыкания)

Или вы можете сделать обратное, оставив истинную часть if пустой и объявите только ложную, как указывает Andz.