Как набрать приведение при использовании оператора объединения нулей?

Скажи, что у меня есть это:

$username = (string) $inputs['username'] ?? null;

Если $inputs['username'] установлен, то я хочу, чтобы его бросили string, Если это не установить тогда $username должно быть null,

Однако на данный момент, если $inputs['username'] не установлено, это будет пустая строка вместо нуля.

Как я могу это исправить? Или это намеренное поведение?

1

Решение

Вы можете использовать только оператор null-coalesce, если значение, которое вы хотите вернуть в ненулевом случае, совпадает со значением, которое вы тестируете. Но в вашем случае вы хотите разыграть его при возвращении.

Поэтому необходимо использовать обычный условный оператор и явно проверить значение.

$username = isset($input['username']) ? (string) $input['username'] : null;
0

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

Я не совсем уверен, что вы пытаетесь сделать, но похоже, что вы играете не в том месте.

Вы можете сделать что-то вроде этого:

$username = $inputs['username'] ?? null;

// cast $username to string
if ($username && $username = (string) $username){
// your code here
}
0

Я полагаю, что вы могли бы преобразовать значения «falsey» типа null-coalesced string обратно в null.

$username = (string) ($inputs['username'] ?? '') ?: null;

Это выглядит странно, но я думаю, что это даст то, что вы хотите, без использования isset, В этом случае '' не имеет значения, потому что он никогда не будет использован; это может быть что-то фальшивое.

0

Старая школа:

<?php
$bar = null;
if(isset($foo))
$bar = (string) $foo;

Вы можете отбросить нулевое назначение:

isset($foo) && $bar = (string) $foo;
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector