我在php中遇到静态变量的问题。我从另一个JS函数调用一个php函数,静态变量没有增加。不应该吗?
这就像我正在尝试做的事情(只是非常简化);
<?php
function someFunc() {
static $y = 0;
++$y;
return $y;
}
?>
<script>
function someFunc() {
var x = 0;
while (++x<=31) {
<?php echo someFunc(); ?>
}
}
</script>
此代码的问题是,<?php echo someFunc(); ?>
只返回'1'。每次循环也是如此。
有人可以解释为什么会发生这种情况以及是否有解决方法。
答案 0 :(得分:4)
PHP是一个服务器端脚本,在javascript加载到用户浏览器之前很久就会运行并完成。
这意味着当服务器将页面发送到客户端时,PHP函数将运行一次。查看源代码客户端。它看起来像这样:
<script>
function someFunc() {
var x = 0;
while (++x<=31) {
1
}
}
</script>
你不能以你想要的方式混合javascript和PHP。对于这么简单的事情,如果需要服务器端资源,可以使用所有PHP,如果不需要,则使用所有javascript。如果您在页面加载完成后需要服务器端资源,则需要研究AJAX。
答案 1 :(得分:1)
下面的代码被解释为纯文本,不会被执行。
<script>
function someFunc() {
var x = 0;
while (++x<=31) {
<?php echo someFunc(); ?> // EXCEPT FOR THIS LINE
}
}
</script>
<?php echo someFunc(); ?>
执行一次并返回1.
PHP在服务器端执行 - JavaScript clienside。
您有效地生成以下文字并传递给浏览器:
<script>
function someFunc() {
var x = 0;
while (++x<=31) {
1
}
}
</script>
答案 2 :(得分:0)
javascript不会调用你的php函数,他没有连接。您只是在呈现页面时回显php someFunc()
的返回值。
答案 3 :(得分:0)
因此php和js不会同时执行,php在服务器上执行并发送到浏览器,然后浏览器执行js。
因此,发送到浏览器的是:
<script>
function someFunc() {
var x = 0;
while (++x<=31) {
1
}
}
</script>
php someFunc()一次运行一次,因为此时js inst循环。