Как набрать приведение при использовании оператора объединения нулей? - PullRequest
0 голосов
/ 14 мая 2018

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

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

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

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

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

Ответы [ 4 ]

0 голосов
/ 14 мая 2018

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

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

Вы можете отказаться от нулевого задания:

isset($foo) && $bar = (string) $foo;
0 голосов
/ 14 мая 2018

Полагаю, вы могли бы преобразовать значения "falsey" для объединенной строки типа null обратно в null.

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

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

0 голосов
/ 14 мая 2018

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

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

$username = isset($input['username']) ? (string) $input['username'] : null;
0 голосов
/ 14 мая 2018

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

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

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

// cast $username to string 
if ($username && $username = (string) $username){
   // your code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...