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]   

> Описание: Не могу добиться правильной интерпретации переменной в строке
macik
Отправлено: 25 Февраля, 2011 - 22:10:30
Post Id


Новичок


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


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




Документация:
http://www.php.su/learnphp/datatypes/?string2

Суть (php 5.2):
Заменить в строке имя переменной на значение, которое в этой переменной содержится.
С обычной переменной работает, с массивом нет.

Пример:
PHP:
скопировать код в буфер обмена
  1.  
  2. $a[1] ='test';
  3. $b = 'test2';
  4. $var = 'b'
  5. echo "0: ${$b} \n\r";
  6.  
  7. echo "1: ${a[1]} \n\r";
  8.  
  9. $var = 'a[1]';
  10. echo "2: ${$var} \n\r";
  11.  


Результат:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. 0: test2
  3. 1: test
  4. 2:  
  5.  


Т.е. прямое указание ${a[1]} работает, а если строку 'a[1]' спрятать в переменную уже не работает.
Как быть?
 
 Top
altermann
Отправлено: 25 Февраля, 2011 - 22:39:36
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010  
Откуда: Днепропетровск


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




Попробуйте так
PHP:
скопировать код в буфер обмена
  1. $var = 'a[1]';
  2. echo "2: " . $$var . " \n\r";


А вообще Zend рекомендует такой синтаксис: {$var}


-----
Я прирожденный кузнец, я не могу не куя!
 
 Top
evgenijj
Отправлено: 25 Февраля, 2011 - 22:47:22
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




Поверьте на слово -- если Вы используете такие конструкции, значит Вы что-то делаете неправильно. Конструкции типа $$var порочны... Всегда есть способ сделать иначе.
 
 Top
JustUserR
Отправлено: 25 Февраля, 2011 - 23:24:15
Post Id



Активный участник


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


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




evgenijj пишет:
Конструкции типа $$var порочны... Всегда есть способ сделать иначе.
Использование предполагаемых конструкций генерации идентификатора целевой переменной в реальном времени, не является обособленным элементов в языке программирования PHP, обеспечивающем возможность потоковой модификации уровня элементного трактованя и вложения ассоциированных объектов, а также организации взаимосвязи области хранения переменных объектов с определенным ассоциативным массивом; при этом использовании функции eval в действительности не является оптмальным методом организации приложения, поскольку в отличие от элементов модификации элементного уровня трактования по схеме разделения уровней, указанная функция не обеспечивает соответствующей статичности слоя потока исполнения в реальной позиции


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Stierus Супермодератор
Отправлено: 25 Февраля, 2011 - 23:55:04
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


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




JustUserR, с каждым днем ты все непонятнее и непонятнее изъясняешься Улыбка)))
 
My status
 Top
JustUserR
Отправлено: 26 Февраля, 2011 - 00:00:10
Post Id



Активный участник


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


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




Stierus пишет:
JustUserR, с каждым днем ты все непонятнее и непонятнее изъясняешься
Большинство рассматриваемых аспектов функционирования, предполагаемые в указанных соообщения потока обсуждения, являются отражениями элементов теории языков и динамических управляющих систем


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Stierus Супермодератор
Отправлено: 26 Февраля, 2011 - 00:14:43
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


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




да вот я примерно о том же Улыбка Вроде бы и по делу пишешь, если поднапрячься, даже сознать можно, что ты донести хочешь ... но как же это все заумно написано - жесть Улыбка)) . Люди стараются сложные вещи объяснять простым языком, а тебе удается элементарные вещи объяснить так, то я, зная их, перечитываю твои посты по 4 раза что бы суть понять Улыбка
 
My status
 Top
evgenijj
Отправлено: 26 Февраля, 2011 - 00:15:03
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




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

Stierus пишет:
JustUserR, с каждым днем ты все непонятнее и непонятнее изъясняешься

Я на 90% не понял JustUserR, но идею уловил -- так делать не надо. Правда я это понял не из учебников, а просто долбанулся пару раз башкой...
 
 Top
Stierus Супермодератор
Отправлено: 26 Февраля, 2011 - 00:52:14
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


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




Цитата:
Правда я это понял не из учебников, а просто долбанулся пару раз башкой...
Если не сложно, можешь написать, в чем возникают проблемы ? Я пока не сталкивался с проблемами, чисто интуитивно стараюсь избегать подобных конструкций, если сможешь поделиться опытом - был бы благодарен.
 
My status
 Top
evgenijj
Отправлено: 26 Февраля, 2011 - 01:49:05
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


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




Stierus пишет:
чисто интуитивно стараюсь избегать подобных конструкций

Вот и я чисто интуитивно... Знаешь, говорят: не ходи на красный свет -- плохо будет. Я и не хожу. Мне приходилось читать исходники -- и нигде я таких конструкций не видел. Сам бы увидел -- использовал. Я бы даже сказал больше --не возникало нужды. Пришлось писать форум, каталог продукции (с интернет-магазином), CMS. И не возникло необходимости. Я слышал легенду, что давным-давно программы писали с использованием GOTO: по этому оператору можно перейти к любой строке скрипта. Но потом было доказано, что программы можно писать без использования GOTO. И стали писать без GOTO.

Все языки программирования просты, как две копейки... Три-четыре несложные конструкции, а все, что сложнее -- скорее всего неправильно...

(Отредактировано автором: 26 Февраля, 2011 - 05:36:10)

 
 Top
Champion Супермодератор
Отправлено: 26 Февраля, 2011 - 09:52:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Всё просто: такие конструкции усложняют понимание кода и увеличивают его сложность, потому что когда видишь такую вещь, может оказаться непросто понять, как сформировалось имя переменной, что когда в ней лежит.
Хотя, если оно формируется недалеко, в 5-10 строчках сверху по простенькому правилу, то это может быть очень удобно и позволит не продублировать где-нибудь код.
Про GOTO, кстати, аналогично. Можно без него, но есть ситуации, где решение с goto и производительнее и даже гораздо удобнее читаются.
 
 Top
JustUserR
Отправлено: 27 Февраля, 2011 - 15:55:04
Post Id



Активный участник


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


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




Stierus пишет:
Если не сложно, можешь написать, в чем возникают проблемы ?
Осуществление использование конструкций с включением расчета исполянемого потока кода в реальном времени, основанного на применении оператора eval в явном или неявном виде, в действительности могут обеспечить некорректное функционирование приложения или внедрения неявного backdoor-пути, поскольку производится двухсторонная модификация уровня трактования значения информационных полей в реальном времени, что может являться основанием для осуществоения включения в исполняемый поток неуправляемых операторов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB