2011-11-06 123 views
2

我知道在php中,當我使用echo時,我可以在引用的字符串中放置一個變量名,但我顯然不能用會話變量來完成此操作。誰能解釋爲什麼?在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 

所以我可以去我的快樂的方式知道如何做是正確的(僅保留會話變量中的雙引號外),但我真的想明白爲什麼這不會對會話變量工作。

謝謝!

+0

請閱讀有關字符串PHP手冊:http://php.net/strings,使用'$ {VAR}'代替。 – hakre

+0

謝謝......我已經閱讀過那個頁面,但在您的評論之後重新閱讀,並意識到有一個鏈接,我應該在該頁面上跟隨另一個有解釋的鏈接。不好意思問這麼瑣碎的事情。 :-) – doxguy

回答

16

內使用雙引號的字符串必須在{}附上一個複雜的變量(數組或對象的屬性):

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

這不是$_SESSION具體的問題,而是通過引用鍵訪問的數組。注意,你可以包括用包裹在一個{}數字索引數組值,如"echo $array[2] is two";