Скажи, что у меня есть это:
$username = (string) $inputs['username'] ?? null;
Если $inputs['username']
установлен, то я хочу, чтобы его бросили string
, Если это не установить тогда $username
должно быть null
,
Однако на данный момент, если $inputs['username']
не установлено, это будет пустая строка вместо нуля.
Как я могу это исправить? Или это намеренное поведение?
Вы можете использовать только оператор null-coalesce, если значение, которое вы хотите вернуть в ненулевом случае, совпадает со значением, которое вы тестируете. Но в вашем случае вы хотите разыграть его при возвращении.
Поэтому необходимо использовать обычный условный оператор и явно проверить значение.
$username = isset($input['username']) ? (string) $input['username'] : null;
Я не совсем уверен, что вы пытаетесь сделать, но похоже, что вы играете не в том месте.
Вы можете сделать что-то вроде этого:
$username = $inputs['username'] ?? null;
// cast $username to string
if ($username && $username = (string) $username){
// your code here
}
Я полагаю, что вы могли бы преобразовать значения «falsey» типа null-coalesced string обратно в null.
$username = (string) ($inputs['username'] ?? '') ?: null;
Это выглядит странно, но я думаю, что это даст то, что вы хотите, без использования isset
, В этом случае ''
не имеет значения, потому что он никогда не будет использован; это может быть что-то фальшивое.
Старая школа:
<?php
$bar = null;
if(isset($foo))
$bar = (string) $foo;
Вы можете отбросить нулевое назначение:
isset($foo) && $bar = (string) $foo;