我想知道是否可以选择在哪种情况下可以忽略未定义的变量。在三元条件下,我喜欢这样的想法,即我可以快速设置未定义设置的默认值,如下所示:
$date = $_POST['date'] ?: date();
要使用它,我不得不忽略E_NOTICE
个错误。
但是,我并不喜欢忽略所有未定义变量的想法,并且意外地使用未定义的变量来忽略。所以我想知道这种情况是否有可能存在一些中间立场?
为了澄清,我知道非三元解决方案,例如
$date = (isset($_POST['date'])) ? $_POST['date'] : date();
// or
$date = date();
if(isset($_POST['date'])) {
$date = $_POST['date'];
}
但是我想要问的是,有没有办法获得速记三元条件的好处,同时仍然避免抑制未定义变量的通知。
答案 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();