PHP使用三元运算符的未定义索引

Web*_*ner 2 php ternary-operator

我的PHP版本是5.3.5.

代码:

$num = $_REQUEST['num'] ?: 7;
Run Code Online (Sandbox Code Playgroud)

错误:

Notice: Undefined index: num in C:\path\to\file.php on line 34
Run Code Online (Sandbox Code Playgroud)

有什么建议?

GWW*_*GWW 8

$num = isset($_REQUEST['num']) ? $_REQUEST['num'] : 7;
Run Code Online (Sandbox Code Playgroud)

我假设你想要$_REQUEST['num'],否则7.

  • 我又过了30秒.但我至少投入了传入的int.:)另外......我永远不会再使用isset了.它永远不会完全按照你的意愿去做.array_key_exists()和empty()是你的朋友. (2认同)
  • 是的,请改用array_key_exists(). (2认同)

小智 6

是不是对短分配代码使用错误抑制好?

我们可以写$ price = @ $ rec ['Product'] ['new']?:$ rec ['Product'] ['old'];

使用@保存我重复相同的变量,并允许我使用捷径三元运算符而不产生通知.

我知道使用@被认为不好,但对于这种特殊情况,我不认为任何事情都可能出错.

谢谢.


小智 5

这是预期的行为; 根据http://bugs.php.net/bug.php?id=45760,?:快捷方式就是:快捷方式.

换一种说法:

$num = $_REQUEST['num'] ?: 7;
Run Code Online (Sandbox Code Playgroud)

的评估方式与:

$num = $_REQUEST['num'] ? $_REQUEST['num'] : 7;
Run Code Online (Sandbox Code Playgroud)

以及所暗示的一切(并且通过线程中的其他答案得到充分解决).