ErrorException [Примечание]: неопределенная переменная для существующей переменной, динамически создаваемая - PullRequest
0 голосов
/ 02 июня 2018

Во-первых, спасибо, что уделили мне время.

Во-вторых, извините, если это дубликат, я законно искал в течение 3 дней и не нашел ответа на мою конкретную ситуацию.

Визуализация полученной ошибки

Эта первая строка преобразует значения массива в строку индекса (ов)

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

После извлечения $ path становится строкой в ​​формате, аналогичном ['key1'] ['key2']

Здесь я проверяю, найден ли один ценный элемент (ondemand) в этой строке ключей, поэтомупока все хорошо.

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

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

Как самообладание, я жестко запрограммировал один из моих конкретных элементов сценария, и он действительно существует, поэтому моя проблема не в том, чтобы не инициализировать мойпеременная, как предлагали большинство других тем.

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

Моя проблема лежит здесь, я получаю "ErrorException [Замечание]: неопределенная переменная: coupon [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 не очень ценит мою «встроенную» переменнуюно должен быть какой-то способ заставить эту логику работать ... любые указания на это были бы действительно оценены.**

1 Ответ

0 голосов
/ 03 июня 2018

Проблема связана с $$ var_dim_str.Что делает $$, это разрешает $$ variableName быть именем переменной, содержащейся в $ variableName.Он в основном содержит ссылку на другую переменную на основе имени переменной .С сайта PHP:

Переменная переменная принимает значение переменной и обрабатывает его как имя переменной.В приведенном выше примере, привет, можно использовать в качестве имени переменной с помощью двух знаков доллара.т.е.

Итак ...

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