Я знаю, что это старая тема, но все же. Я только что столкнулся с проблемой в коде, который я отлаживаю на работе, и, возможно, у кого-то может быть похожая проблема ...
Допустим, код выглядит так:
$positions = $this->positions() || [];
Вы ожидаете (как вы привыкли, например, из javascript), что когда $ this-> позиции () возвращает false или ноль, $ позиции - это пустой массив. Но это не так. Значение TRUE или FALSE зависит от того, что возвращает $ this-> позиции ().
Если вам нужно получить значение $ this-> позиции () или пустой массив, вы должны использовать:
$positions = $this->positions() or [];
EDIT:
Приведенный выше пример не работает, как задумано, но правда в том, что ||
и or
- это не одно и то же ... Попробуйте это:
<?php
function returnEmpty()
{
//return "string";
//return [1];
return null;
}
$first = returnEmpty() || [];
$second = returnEmpty() or [];
$third = returnEmpty() ?: [];
var_dump($first);
var_dump($second);
var_dump($third);
echo "\n";
Это результат:
bool(false)
NULL
array(0) {
}
Итак, третий вариант ?:
является правильным решением, когда вы хотите установить возвращаемое значение или пустой массив.
$positions = $this->positions() ?: [];
Протестировано с PHP 7.2.1