Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Переменная переменной

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
НовыйЮзер
Отправлено: 15 Января, 2016 - 21:34:00
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




Здравствуйте!

Подскажите, пожалуйста, как обработать вот такую конструкцию:
$a = "$b = array('k1' => 'v1')"
т.е. как добраться до содержимого массива.

Спасибо.
 
 Top
dcc0
Отправлено: 15 Января, 2016 - 21:57:41
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Зачем в кавычках?
Может, так:

Если да, то это синоним.
У вас это строка.
b вообще не определена.

(Отредактировано автором: 15 Января, 2016 - 21:59:00)



-----
Март 2021. Бросил программирование
 
 Top
НовыйЮзер
Отправлено: 15 Января, 2016 - 22:02:44
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




Не совсем так.
Переменная $a имеет текстовое значение в виде строки: $b = array('k1' => 'v1');
 
 Top
dcc0
Отправлено: 15 Января, 2016 - 22:06:54
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Что значит не так?
а - строка, b в этой строке, как переменная и она не определена. Все верно.


Цитата:

NULL

(Отредактировано автором: 15 Января, 2016 - 22:07:49)



-----
Март 2021. Бросил программирование
 
 Top
НовыйЮзер
Отправлено: 15 Января, 2016 - 22:20:18
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




Да, сейчас $b не определена. Приходит именно такая текстовая строка из вне.

var_dump($a);
дает
$b = array('k1' => 'v1');
это текстовая строка.

Вот и возникает вопрос: как преобразовать эту текстовую строку в нормальный массив.
 
 Top
dcc0
Отправлено: 15 Января, 2016 - 22:24:49
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Очевидно - убрать кавычки.
(Добавление)
Переменная переменной еще так делается:
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $a = "$b = array('k1' => 'v1')";
  4. $$a= $b = array('k1' => 'v1');
  5.  
  6. echo $$a;
  7. echo $a;
  8. echo $b;
  9. ?>
  10.  

Но не разу не встречал на практике.
Можно обратиться к (а) как строке или как к массиву.


-----
Март 2021. Бросил программирование
 
 Top
НовыйЮзер
Отправлено: 15 Января, 2016 - 22:32:11
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




dcc0 пишет:
Очевидно - убрать кавычки.


Убирать нечего! Т.к. это значение переменной!!! А кавычки только показывают, что значение является обычной текстовой строкой.

Строка 4 - некорректна по условию.
var_dump($a); --> $b = array('k1' => 'v1');
var_dump($$a); --> NULL

(Отредактировано автором: 15 Января, 2016 - 22:41:15)

 
 Top
dcc0
Отправлено: 15 Января, 2016 - 22:49:29
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Что тут некорректного?
Оно даже так возможно:
PHP:
скопировать код в буфер обмена
  1. $$a= $b = $c = $d = array('k1' => 'v1');
  2. var_dump($$a);
  3.  

Вывод


-----
Март 2021. Бросил программирование
 
 Top
НовыйЮзер
Отправлено: 15 Января, 2016 - 22:58:06
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




dcc0 пишет:
Что тут некорректного?
Оно даже так возможно:
PHP:
скопировать код в буфер обмена
  1. $$a= $b = $c = $d = array('k1' => 'v1');
  2. var_dump($$a);
  3.  

Вывод


То, что Вы пишите - это код программы.
А у меня:
$b = array('k1' => 'v1');
это не код программы!!!! Это ЗНАЧЕНИЕ переменной (строковое) и именно в таком виде!!!
Соответственно, я так как Вы предлагаете написать не могу!
 
 Top
dcc0
Отправлено: 15 Января, 2016 - 23:03:59
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)





Без кавычек b у вас равно массиву.


Переводим с php на русский язык:
Переменная (а) равна строке, в начале которой стоит переменная (b),
переменная b обрабатывается, так как переменные в двойных кавычках обрабатываются.
И она не определена, так как последующие символы за оной трактуются как строка, включая оператор присвоения (=).

(Отредактировано автором: 15 Января, 2016 - 23:06:29)



-----
Март 2021. Бросил программирование
 
 Top
НовыйЮзер
Отправлено: 15 Января, 2016 - 23:20:32
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




dcc0 пишет:
И она не определена, так как последующие символы за оной трактуются как строка, включая оператор присвоения (=).

Ха-ха.
Так с этого и начали. Это и было вопросом данной темы!
 
 Top
dcc0
Отправлено: 15 Января, 2016 - 23:29:31
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Когда ответ кроется в вопросе, что еще сказать?


-----
Март 2021. Бросил программирование
 
 Top
Panoptik
Отправлено: 16 Января, 2016 - 01:29:30
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




ответ на ваш вопрос следующий

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $a = "\$b = array('k1' => 'v1')";
  3.  
  4.  
  5. eval($a.';');
  6.  
  7.  


но должен предупредить что функция eval выполняет любой код и если в этом коде будет зловредный код, вы можете получить массу проблем

еще один вариант это записать содержимое переменной в файл и вызвать этот файл на исполнение с помощью директивы require или include
и в этом случае тоже можете вызвать зловредный код
но если вы уверены что данные у вас 100500 раз проверены и нормальные то можете использовать смело данные выше советы


-----
Just do it
 
 Top
НовыйЮзер
Отправлено: 16 Января, 2016 - 02:05:43
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Янв. 2016  


Помог: 0 раз(а)




Да, это как раз то, что надо - работает!
СПАСИБО!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB