PHP 8 如何简洁地递增动态生成的变量

问题描述 投票:0回答:3

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 increment
3个回答
2
投票

在 PHP 8 中,您可以使用空合并运算符 (??) 和空安全运算符 (?->) 来简洁地自动递增数组中动态生成的变量。这使您可以优雅地处理未设置的变量,而不会引发警告。

 $_SESSION['dynamic']['var'] ??= 0;
 $_SESSION['dynamic']['var']++;

0
投票

您可以使用

@
前缀来抑制警告,如下所示:

@$_SESSION['dynamic']['var']++;

但是依赖未定义变量/索引的默认值并不是一个好的做法。使用您自己建议的较长版本可能会更好。


0
投票

如果您不介意使用参考:

$v = &$_SESSION['dynamic']['var'];
$v++;
$v = &$_SESSION['dynamic2']['var2']; 
$v += 10;
unset($v);
© www.soinside.com 2019 - 2024. All rights reserved.