Laravel data_get helper имеет различное поведение для массива и объекта

$array = ['key' => null];

echo data_get($array, 'key', 'default') // Result was default
$array = (object) $array;
echo data_get($array, 'key', 'default') // Result was null

Есть ли какая-то конкретная причина, по которой это было сделано так: массивы и объекты?

Ларавел док ссылка они упоминали, как это data_get function retrieves a value from a nested array or object using "dot" notation: Так должно быть одинаковое поведение как для массива, так и для объекта.

0

Решение

Если вы проверите источник data_get(), вы заметите

if (Arr::accessible($target) && Arr::exists($target, $segment)) {
$target = $target[$segment];
} elseif (is_object($target) && isset($target->{$segment})) {
$target = $target->{$segment};
} else {
return value($default);
}

а также isset($target->{$segment}) который возвращается false за null и, следовательно, возвращает значение по умолчанию для объекта, который имеет null значение для искомого ключа.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]