PHP with Javascript - What is the scope of PHP variables ins


PHP with Javascript - What is the scope of PHP variables inside a <script></script> tag?

我试图混合php和javascript,因为我的javascript需要访问一些php变量时,页面加载。我理解一些东西有困难,我做了一个代码示例。

<?php
session_start();
$test = 100;
$_SESSION['test'] = 200;
?>
<html>
<head>
<title>Test This Out</title>
</head>
<body>
<h1> Testing Javascript and PHP Mixed </h1>
<p>
<?php 
echo("The value of '$test is $test and the value of '$_SESSION['test'] is ");
?>
</p>
<p>
<script type="text/javascript">
<?php 
session_start();
if(isset($test)) echo("document.write('Non-session variable exists and is $test <br />');"); 
else echo("document.write('Non-session variable does not exist<br />');");
if(isset($_SESSION['test'])) echo("document.write('Session variable exists <br />');"); 
else echo("document.write('Session variable does not exist<br />');");
?>
</script>
</p>
</body>
</html>

输出如下:

Testing Javascript and PHP Mixed
The value of $test is 100 and the value of $_SESSION['test'] is
Non-session variable exists and is 100
Session variable exists 

所以我试图了解什么类型的php变量是可用的脚本。看起来变量$test是可用的,但是即使它知道

$_SESSION['test'] 

存在,如果我尝试输出这个值(与我输出

的方式完全相同)
$test

变量),整个系统挂起。

我的问题是:1. 可以在javascript中使用的php"看到"变量我已经在页面上定义的早些时候?2. 为什么我要打印

$_SESSION['test'] 

变量使整个东西崩溃(根本没有渲染)?3.第二个

session_start(), 

脚本中的那个,有必要吗?

谢谢你的帮助

PHP在服务器上运行,Javascript在客户端上运行。它们有完全不同的执行环境,在完全不同的时间执行。PHP变量具有PHP的变量作用域,而JS规则不参与其中,因为PHP不是在"JS环境"中执行的。这是不可能的。

你可以有PHP GENERATE JS代码/变量,但是这些变量不会被JS引擎处理/执行/验证,直到页面已经由PHP生成并发送到客户端浏览器。

你也可以让JS"发送"变量到PHP,但这是通过AJAX调用完成的,同样,JS在客户端浏览器中运行,PHP在web服务器上运行。就PHP而言,AJAX调用只是一个常规的HTTP请求,当响应返回到浏览器中运行的JS时,它就像来自服务器的任何其他HTTP响应一样。

您的第二个session_start()将失败-会话必须在服务器生成任何输出之前启动,因为会话ID令牌作为常规HTTP cookie发送到客户端浏览器。每当脚本产生任何输出时,PHP都会自动发送完整的HTTP头,并且在第二个session_start()执行之前,您已经输出了HTML页面的开始和一些JS代码。

如果你有这样的东西:

<script type="text/javascript">
var jsvar = <?php echo $phpvar; ?>;
</script>

对于PHP引擎而言,这是完全有效的PHP代码,并且它将输出$phpvar在该点的内容。但是请记住,PHP是在服务器上运行的,PHP引擎不知道您要将变量输出到什么环境中。它不知道它在javascript块中,它只知道它应该输出一个变量的内容。如果此时没有定义$phpvar,您实际上会生成:

var jsvar = ;

是一个语法错误。这完全取决于,以确保您使用PHP生成有效的JAVASCRIPT代码。

代码,正如您现在所拥有的那样,是过程性的,这意味着它将按顺序从第1行运行到EOF, b/c您没有进行任何自定义函数调用等。

您不需要第二个session_start(),第一个足以初始化会话。

从来没有听说过在尝试var dump会话变量时系统挂起。也许可以试试这个格式(单引号代替双引号):

echo('The value of $test is ' . $test . ' and the value of $_SESSION[test] is ' . $_SESSION['test']);