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

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

13 голосов
/ 23 июня 2011

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

$my_string = 'Hello';

$my_string .= ' there';

это вернуло бы 'Привет!'это троичная операция, но все примеры, с которыми я сталкивался, предназначены для if / else, который будет выглядеть примерно так:

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

, поэтому возможно ли сделать это только с IF и без else?*

Спасибо.

Ответы [ 9 ]

24 голосов
/ 23 июня 2011

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

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

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

18 голосов
/ 23 июня 2011

Нет ... троичное означает три части, которые вам нужны, условие, истинная часть и ложная часть

16 голосов
/ 23 июня 2011

комбинируя мелламокб и андз, вы можете сделать это:

( $append != 'do' ) ?: $my_string .= ' there';
5 голосов
/ 23 июня 2011

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

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

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

4 голосов
/ 23 июня 2011

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

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

Если вы инвертируете оператор так, что троичный находится снаружи, а не внутри присваивания, тогда вы можете поместить весь оператор в часть ИСТИНА,затем просто сделайте что-нибудь, что является командой без операции в части ELSE.

3 голосов
/ 15 марта 2013

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

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

EDIT

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

if ($append == 'do') $my_string .= ' there';
1 голос
/ 24 августа 2014

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

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

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

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

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

1 голос
/ 23 июня 2011

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

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

Вызовите его с помощью:

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

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

0 голосов
/ 07 августа 2018

простой и очень эффективный способ - использовать TRUE FALSE значения, если вам нечего возвращать.Не только у вас есть аргумент, но вы можете вернуть с точным значением, которое вы хотите, например,

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