在php中回应会话变量

Echoing session variables in php

本问题已经有最佳答案,请猛点这里访问。

我知道在PHP中,当我使用echo时,可以将变量名放在带引号的字符串中,但显然我不能用会话变量来实现这一点。有人能解释为什么吗?

下面是代码,其中"冒犯"的PHP被注释掉:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
session_start();
$test = 100;
$_SESSION['test'] = 200;
?>
<html>
  <head>
    Test
  </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>

输出结果如下:

1
2
3
4
5
100

100

200

但如果我取消对违规代码行的注释:

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

我没有得到输出和以下错误:

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

所以我可以继续我的快乐方式知道如何正确地做(只是保持会话变量在双引号之外),但我真的想知道为什么这对会话变量不起作用。

谢谢!


在双引号字符串中,必须将复杂变量(数组或对象属性)括在{}中:

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

这不是$_SESSION的问题,而是由带引号的键访问的任何数组。注意,您可以包括一个数字索引数组值,并将其包装在{}中,如"echo $array[2] is two";中所示。