空值合并运算符与类型转换

13

我已经升级到PHP 7,并开始使用null合并运算符转换类似以下的内容

$email = isset($_SESSION['email']) ? $_SESSION['email'] : '';

对于

$email = $_SESSION['email'] ?? '';

但如果我还需要进行转换,我就不知道该如何做了。例如,对于旧语句:

$id = isset($_GET['id']) ? (int) $_GET['id'] : 0;

我认为这样的事情会是

$id = (int) $_GET['id'] ?? 0;

应该是可行的,但实际上并不是这样,如果$_GET['id']没有设置,$id会被解析为0,但我会收到通知:

注意:在test.php的第2行中未定义索引:id


1
结合性是你的问题: $id = (int) ($GET['id'] ?? 0); - Mark Baker
1个回答

21

(int)强制转换运算符的优先级高于??运算符,因此请使用括号:

$id = (int) ($_GET['id'] ?? 0);

如果你不想简单地考虑操作顺序,可以从“整个表达式的结果 - 无论哪一侧被使用 - 我想要的是一个 int,而不仅仅是一个操作数或另一个操作数”的角度来思考。这是同样的事情,只是以更“现实世界”的方式来表述。 - Adam Cameron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接