PHP 8中如何简洁递增动态生成的变量?
PHP 8中避免动态变量/数组键递增触发Warning的简洁写法
PHP 8将操作未定义变量或数组键的Notice级别错误提升为Warning,比如执行$_SESSION['dynamic']['var']++;:
- PHP 7.4:自动创建变量并赋值为1,同时抛出Notice
- PHP 8+:同样会创建变量赋值为1,但抛出Warning
如果不想触发Warning,又不想使用冗余的$_SESSION['dynamic']['var'] = ($_SESSION['dynamic']['var']??0)+1;,可以试试这些更简洁的方案:
方案1:提前初始化数组结构
如果能提前确定要使用的数组键,先初始化默认值,之后就能正常使用++运算符:
// 确保父数组存在 $_SESSION['dynamic'] ??= []; // 给目标键设置默认值0 $_SESSION['dynamic']['var'] ??= 0; // 后续直接递增,不会触发Warning $_SESSION['dynamic']['var']++;
这种方式适合键名固定的场景,一次初始化后可多次使用递增操作。
方案2:自定义辅助函数
如果频繁使用动态键的递增操作,写一个复用的辅助函数会更高效:
function inc(&$variable) { return $variable = isset($variable) ? $variable + 1 : 1; } // 调用方式简洁,且不会触发Warning inc($_SESSION['dynamic']['var']);
通过引用传递参数,函数内部直接处理变量的初始化与递增,每次调用仅需一行代码,比重复写空合并表达式简洁很多。
方案3:三元运算符简化写法
如果不想额外定义函数,也可以用三元运算符简化,比空合并赋值的写法稍短:
isset($_SESSION['dynamic']['var']) ? $_SESSION['dynamic']['var']++ : $_SESSION['dynamic']['var'] = 1;
内容的提问来源于stack exchange,提问作者Mm-Art-In
相关产品推荐
相关产品推荐

