有人可以解释PHP中三元运算符速记(?:)和空合并运算符(??)之间的差异吗?
他们什么时候表现不同,以同样的方式(如果这种情况发生)?
$a ?: $b
Run Code Online (Sandbox Code Playgroud)
VS.
$a ?? $b
Run Code Online (Sandbox Code Playgroud) 我升级到PHP 7并开始使用null coalesce运算符来转换像
$email = isset($_SESSION['email']) ? $_SESSION['email'] : '';
Run Code Online (Sandbox Code Playgroud)
至
$email = $_SESSION['email'] ?? '';
Run Code Online (Sandbox Code Playgroud)
但如果我也在施法,我无法弄清楚如何做到这一点.例如,旧的陈述
$id = isset($_GET['id']) ? (int) $_GET['id'] : 0;
Run Code Online (Sandbox Code Playgroud)
我会想到像
$id = (int) $_GET['id'] ?? 0;
Run Code Online (Sandbox Code Playgroud)
应该工作,但它似乎没有在某种意义上,如果$_GET['id']没有设置,$id解决,0但我收到通知
注意:未定义的索引:第2行的test.php中的id