静态变量PHP的问题

时间:2011-08-10 17:31:37

标签: php javascript static global

我在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'。每次循环也是如此。 有人可以解释为什么会发生这种情况以及是否有解决方法。

4 个答案:

答案 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循环。