在三元条件下忽略通知

时间:2016-11-17 17:05:22

标签: php ternary-operator

我想知道是否可以选择在哪种情况下可以忽略未定义的变量。在三元条件下,我喜欢这样的想法,即我可以快速设置未定义设置的默认值,如下所示:

$date = $_POST['date'] ?: date();

要使用它,我不得不忽略E_NOTICE个错误。

但是,我并不喜欢忽略所有未定义变量的想法,并且意外地使用未定义的变量来忽略。所以我想知道这种情况是否有可能存在一些中间立场?

为了澄清,我知道非三元解决方案,例如

$date = (isset($_POST['date'])) ? $_POST['date'] : date();
// or
$date = date(); 
if(isset($_POST['date'])) {
   $date = $_POST['date'];
}

但是我想要问的是,有没有办法获得速记三元条件的好处,同时仍然避免抑制未定义变量的通知。

3 个答案:

答案 0 :(得分:3)

前面加上@

$date = @$_POST['date'] ?: date('Y-m-d');
        ^

无论如何,我建议改为使用isset进行验证:

$date = isset($_POST['date']) ? $_POST['date'] : date('Y-m-d');

答案 1 :(得分:1)

如果您使用的是PHP 7+,则可以使用the null coalescing operator, ?? - 它不会引发有关未设置变量的通知。它还显式检查null而不是空变量 - ?:不能直观地用于零或空字符串等。

// Raises a notice if $_POST['date'] isn't set
$_POST['date'] ?: date();

// Won't raise a notice
$_POST['date'] ?? date();

顺便说一句,你可能意味着time()而不是date(),因为后者需要格式参数。或者你可能刚刚离开了你的榜样。

答案 2 :(得分:0)

这可行:

$date = ! empty($_POST['date']) ? $_POST['date'] : date();