首页 > 解决方案 > 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 并没有真正欣赏我的“内置”变量,但必须有某种方法可以使这个逻辑工作......任何关于此的指针都会非常感激。**

标签: variablesphp-7

解决方案


问题确实在于 $$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; 

推荐阅读