ErrorException [注意]:动态构建的现有变量上的未定义变量

时间:2018-06-02 17:14:31

标签: variables php-7

首先感谢您在我的问题上的时间。

对不起,如果这是重复的话,我合法搜索了3天,并没有找到我特定情况的答案。

Visual on the error obtained

  

第一行将数组的值转换为索引字符串

$path = self::extract_path($path);
  

提取后,$ path变为一个字符串,其格式类似于[' key1'] [' key2']

     

在这里,我测试是否在Keys字符串中找到了一个有价值的元素(ondemand),到目前为止一直很好。

if( $path !== FALSE && strpos($path, $element) !== FALSE){

$var_dim_str = 'coupon' . $path . '[recurrence]';
  

作为一个自我证明,我硬编码了我的一个特定场景元素,它确实存在,所以我的问题并不是我的变量的非初始化,正如大多数其他主题所暗示的那样。

    var_dump($coupon['item']['ondemand']['recurrence']);
  

我的问题在于此处,我得到" ErrorException [注意]:未定义的变量:优惠券[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'] [' reurrence'] => 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并不真的很感激我建造的#39;变量,但必须有一些方法来使这个逻辑工作......任何关于此的指针将非常感激。 **

1 个答案:

答案 0 :(得分:0)

问题确实存在于$$ var_dim_str中。 $$所做的是将$$ variableName解析为$ variableName中包含的变量名。它基本上包含对基于变量名称的另一个变量的引用。从PHP站点:

  

变量变量采用变量的值并将其视为变量的名称。在上面的示例中,hello可以通过使用两个美元符号用作变量的名称。即。

所以......

// 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;