В течение долгого времени я хотел быть в состоянии сделать это без небольшой дополнительной расточительности:
$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()
, так как в этом есть смысл, почему это необходимо, но постоянное взятие на : '';
кажется довольно хитрым для общего паттерна ...