如何让PHP compact忽略不存在的变量?Laravel场景解决方案咨询
PHP compact 未定义变量报错解决方案
PHP 原生compact()函数没有内置忽略未定义变量的能力,只要传入的变量名对应变量不存在,就会触发运行报错,以下是三种适配Laravel场景的可行方案:
方案1:手动构造参数数组(最推荐)
直接弃用compact手动组装视图参数,可选变量存在时再加入数组,可读性和可维护性最高:
// 先加入必传参数 $data = [ 'canvote' => $canvote, 'opinionClosed' => $opinionClosed, ]; // 可选变量存在时再追加 if (isset($userVoteDecision)) { $data['userVoteDecision'] = $userVoteDecision; } return view('vote.cast', $data);
方案2:利用get_defined_vars过滤变量
如果不想改太多原有写法,可以直接获取当前作用域所有已定义变量,过滤出需要的键名:
$allowedKeys = ['canvote', 'opinionClosed', 'userVoteDecision']; // 自动过滤未定义的变量,不会触发报错 $data = array_intersect_key(get_defined_vars(), array_flip($allowedKeys)); return view('vote.cast', $data);
适合有大量可选参数需要传递的场景,不用逐个判断变量是否存在。
方案3:提前给可选变量赋默认值
如果可选变量不存在时可以传递默认值(比如null),只需要在调用compact前初始化变量即可:
// 变量存在时取原值,不存在时赋值为null $userVoteDecision ??= null; return view('vote.cast', compact('canvote', 'opinionClosed', 'userVoteDecision'));
改动最小,适合默认值逻辑简单的场景。
内容的提问来源于stack exchange,提问作者Dave Hulst
相关产品推荐
相关产品推荐

