PHP 8 发出警告通知,表示正在处理未设置的变量。
PHP 7.4:
// Below would create a variable and set it to 0 + 1
// Below would generate a Notice level error.
$_SESSION['dynamic']['var']++;
PHP 8+:
// Below would create a variable and set it to 0 + 1
// Below would create a warning level error that variable does not exist.
$_SESSION['dynamic']['var']++;
问题:
使用动态生成的变量(例如
$_SESSION
值),我们如何保持当前操作但防止发出警告。希望不需要添加大量额外的代码。
我能想到的唯一办法就是
$_SESSION['dynamic']['var'] = ($_SESSION['dynamic']['var']??0)+1;
从
++
到 ($var??0)+1
,代码相当庞大。
这似乎完全否定了
++
和 --
方便的递增/递减运算符的整个快捷方式。 PHP 手册页上没有提及这一点。
在 PHP 8 中,您可以使用空合并运算符 (??) 和空安全运算符 (?->) 来简洁地自动递增数组中动态生成的变量。这使您可以优雅地处理未设置的变量,而不会引发警告。
$_SESSION['dynamic']['var'] ??= 0;
$_SESSION['dynamic']['var']++;
您可以使用
@
前缀来抑制警告,如下所示:
@$_SESSION['dynamic']['var']++;
但是依赖未定义变量/索引的默认值并不是一个好的做法。使用您自己建议的较长版本可能会更好。
如果您不介意使用参考:
$v = &$_SESSION['dynamic']['var'];
$v++;
$v = &$_SESSION['dynamic2']['var2'];
$v += 10;
unset($v);