variables - ErrorException [注意]:动态构建的现有变量上的未定义变量
问题描述
首先感谢您在我的问题上花费的时间。
第二对不起,如果这是重复的,我断断续续地搜索了 3 天,但没有找到针对我的特殊情况的答案。
第一行将数组的值转换为索引字符串
$path = self::extract_path($path);
提取后$path变成一个字符串,格式类似于['key1']['key2']
在这里,我测试是否在该 Keys 字符串中找到了一个有价值的元素(按需),到目前为止一切都很好。
if( $path !== FALSE && strpos($path, $element) !== FALSE){
$var_dim_str = 'coupon' . $path . '[recurrence]';
作为自我验证,我对我的一个特定场景元素进行了硬编码,它确实存在,所以我的问题并不是像大多数其他主题所暗示的那样,我的变量实际上没有初始化。
var_dump($coupon['item']['ondemand']['recurrence']);
我的问题在这里,我得到“ErrorException [Notice]:未定义变量:优惠券[item][ondemand][recurrence]”
$recurrence = $$var_dim_str;
[...]
这是我的 var_dump 输出:
这些是我作为数组的索引,它们被提取以重建变量的字符串',我有一些被调用的可变维度数组,因此维度深度可能并不总是具有固定值,因此我必须动态测试它。
1- $path,在被提取之前
[...]\modules\payment\classes\Helper\Payment.php:290:
array (size=2)
0 => string 'item' (length=4)
1 => string 'ondemand' (length=8)
2- 我们在这里看到 (['item']['ondemand']['recurrence'] => 3) 存在
[...]\modules\payment\classes\Payment\Cart.php:266:
array (size=1)
'item' =>
array (size=3)
'ondemand' =>
array (size=14)
[...]
'recurrence' => string '3' (length=1)
[...]
3-我上面的 var_dump 正在正确输出它。
[...]\modules\payment\classes\Payment\Cart.php:270:string '3' (length=1)
**所以,我的结论是 PHP 并没有真正欣赏我的“内置”变量,但必须有某种方法可以使这个逻辑工作......任何关于此的指针都会非常感激。**
解决方案
问题确实在于 $$var_dim_str。$$ 所做的是将 $$variableName 解析为 $variableName 中包含的变量名。它基本上根据变量的名称保存对另一个变量的引用。从 PHP 站点:
变量变量获取变量的值并将其视为变量的名称。在上面的示例中,hello,可以通过使用两个美元符号用作变量的名称。IE
所以 ...
// some variables
$name = 'Ellan' ;
$site = 'Stack Exchange' ;
$tags = 'PHP-7, Variables' ;
// we want $site
$variableName = 'site' ;
echo $$variableName ;
// we want $tags
$variableName = 'tags' ;
echo $$variableName ;
上面的代码将产生:
Stack Exchange PHP-7, Variables
当你给 $var_dim_str 赋值时:
$var_dim_str = 'coupon' . $path . '[recurrence]';
$var_dim_str 不包含变量的名称。它包含一个字符串。
您确定要在此实例中使用 $$ 吗?也许你真的想使用:
$recurrence = $var_dim_str;
推荐阅读
- continuous-integration - 使用 Github Actions 报告条件作业的状态
- for-loop - 将 NxN for 循环修改为更简单
- azure - 发生 Azure Function App (python) 部署时生成通知
- powerbi - 每月数据在绘制时切换为每日数据
- java - 给定排序数组,如果数组 A 包含元素 A[i] 使得 A[i] = i (递归和分而治之),则返回索引 i
- python - 如何解决谷歌云控制台中的“ModuleNotFoundError: No module named '_lzma'”问题
- java - 在圆内创建三角形
- slim - Slim 4 中间件重定向*在途中*
- c++ - 为什么理解这个递归示例如此难以直观?
- url-rewriting - HTTP 错误 500.19,错误代码 0x8007000d,同时尝试在 IIS 10 中使用“URL 重写”