当$_SERVER['MODE']
设置为not时,以下代码可以理解地生成"dev":
$_SERVER['MODE'] ?? null === 'production' ? 'prod' : 'dev'
这是因为$_SERVER['MODE'] ?? null
解析为NULL
,当然,这并不严格地等于"产生",所以三元表达式的right操作数占优势.
然而,如果我将$_SERVER['MODE']
设置为any的真实值,事情就变得奇怪了.代码会产生"prod"!
我不明白为什么.当设置为$_SERVER['MODE']
时,空值合并将解析为其设置的任何值.因此,除非将其设置为"Products",否则三元表达式的right操作数仍应优先.为什么不是呢?
此外,如果我添加这样的括号:
($_SERVER['MODE'] ?? null) === 'production' ? 'prod' : 'dev'
-然后它就会像预期的那样工作.但为什么不能go 掉括号呢?
相关但不是被复制:PHP null coalesce + ternary operators strange behavior
另外,这种困惑让我损失了40美元.$_SERVER['MODE']
设置为"dev",但随着表达式解析为"prod",实际的AWS实例被启动:D.