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

时间:2011-05-19 01:16:02

标签: php ternary-operator

我的PHP版本是5.3.5。

代码:

$num = $_REQUEST['num'] ?: 7;

错误:

Notice: Undefined index: num in C:\path\to\file.php on line 34

有什么建议吗?

7 个答案:

答案 0 :(得分:8)

$num = isset($_REQUEST['num']) ? $_REQUEST['num'] : 7;

我假设您需要$_REQUEST['num'],否则设置为7。

答案 1 :(得分:5)

这是预期的行为;根据{{​​3}},?:快捷方式就是:快捷方式。

换句话说:

$num = $_REQUEST['num'] ?: 7;

的评估方式与:

相同
$num = $_REQUEST['num'] ? $_REQUEST['num'] : 7;

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

答案 2 :(得分:5)

短分配代码没有使用错误抑制吗?

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

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

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

感谢。

答案 3 :(得分:2)

如果请求中没有,您可能会收到警告。

你最好这样做:

$num = (array_key_exists('num', $_REQUEST)) ? intval($_REQUEST['num']) : 7;

答案 4 :(得分:2)

我使用@ error suppress的第二个dhaval解决方案,更具可读性:

$ num = @ $ _ REQUEST ['num']?:7;

.. ..或

$ num =(array_key_exists('num',$ _REQUEST))? $ _REQUEST ['num']:7;

如果我试图了解其他人的代码,我知道我更愿意阅读。我认为它提供了将error_reporting设置为E_ALL&之间的愉快介质。 ~E_NOTICE(非常糟糕)和上面的样板代码。

答案 5 :(得分:1)

$num = (isset($_REQUEST['num'])) ? $_REQUEST['num'] : 7;

答案 6 :(得分:1)

访问具有不存在的索引的数组总是会引发注意。你需要忽略通知,因为它确实返回null,或者技术上你应该使用array_key_exists