Повторение переменных сеанса в php

Я знаю, что в php я могу поместить имя переменной в строку в кавычках, когда использую эхо, но, по-видимому, я не могу сделать это с переменной сеанса. Кто-нибудь может объяснить, почему?

Вот код с закомментированным "оскорбительным" php:

<?php
session_start();
$test = 100;
$_SESSION['test'] = 200;
?>
<html>
  <head>
    <title>Test</title>
  </head>
  <body>
  <p><?php echo($test."<br />");?></p>
  <p><?php echo("$test"."<br />");?></p>
  <p><?php echo($_SESSION['test']."<br />");?></p>
  <p><?php //echo("$_SESSION['test']"."<br />");?></p>
  </body>
</html>

И вывод выглядит так:

100

100

200

Но если я раскомментирую оскорбительную строку кода:

  <p><?php echo("$_SESSION['test']"."<br />");?></p>

Я не получаю вывод и следующую ошибку:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in - on line 14

Так что я могу продолжать свой веселый путь, зная, как это сделать правильно (просто держите переменную сеанса вне двойных кавычек), но мне бы очень хотелось понять, почему это не работает для переменных сеанса.

Спасибо!


person doxguy    schedule 06.11.2011    source источник
comment
Прочтите руководство по PHP о строках: php.net/strings, вместо этого используйте {$var}.   -  person hakre    schedule 06.11.2011
comment
Спасибо ... Я прочитал эту страницу, но перечитал после вашего комментария и понял, что на этой странице я должен был перейти по ссылке на другую, где есть объяснение. Извините, что спросил что-то настолько тривиальное. :-)   -  person doxguy    schedule 06.11.2011


Ответы (1)


Внутри строки в двойных кавычках вы должны заключить сложную переменную (массив или свойство объекта) в {}:

<p><?php echo("{$_SESSION['test']}"."<br />");?></p>

Это проблема не конкретно $_SESSION, а любого массива, доступ к которому осуществляется с помощью ключей в кавычках. Обратите внимание, что вы можете включить числовое индексированное значение массива с переносом в {}, как в "echo $array[2] is two";

person Michael Berkowski    schedule 06.11.2011