PHP7 Null Coalescing или if / then стенография - оценивать, а не возвращать - PullRequest
0 голосов
/ 18 октября 2018

В течение долгого времени я хотел быть в состоянии сделать это без небольшой дополнительной расточительности:

$test = 'test';
echo !empty($test2) ? 'something before ' . $test2 : '';

Это вернет пустую строку, потому что $test2 не определено.

$test = 'test';
$test2 = 'test2';

echo !empty($test2) ? 'something before ' . $test2 : '';

Возвращает "Something before test2", когда определено $test2.

Не имеет значения, будет ли : ''; изменено на : false; или : null;, потому что здесь все они будут оцениваться какпустой строки.Так что это действительно былоПочему это невозможно сделать if/then, и только if/then/else?

С оператором PHP7 с нулевым объединением двойного знака вопроса ?? кажется, что он становится ближе к возможности сделать это.Но я не думаю, что этот оператор действительно добивается цели.

$test = 'test';
$test2 = 'test2';

echo $test2 ?? 'test3';

У нас есть «если $test2 не null, тогда просто верните его сразу».Поэтому мы не можем добавить к нему «Something before».

Тернарный оператор ?: имеет аналогичную проблему, когда этот сценарий невозможен, поскольку он немедленно возвращает истинное значение.Я не особо возражаю против !empty(), так как в этом есть смысл, почему это необходимо, но постоянное взятие на : ''; кажется довольно хитрым для общего паттерна ...

1 Ответ

0 голосов
/ 18 октября 2018

Да, это возможно, используйте оператор &&.

$test = 'test';
$test2 = 'test2';

!empty($test2) && ($test2 = 'something before ' . $test2);

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

EDIT

Следует отметить, что это, вероятно, плохая практика, поскольку это может затруднить чтение, но это работает.

РЕДАКТИРОВАТЬ 2

Боже мой, это сработало бы, только если вторая половина может быть разрешена как логическое значение, следовательно, не сработало бы для эха, но сработало бы для назначения.

...