【问题标题】:Issues with static variable PHP静态变量 PHP 的问题
【发布时间】:2011-08-10 17:31:37
【问题描述】:

我在 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>

这段代码的问题是,&lt;?php echo someFunc(); ?&gt; 只返回“1”。每次它也循环。 有人可以解释为什么会发生这种情况以及是否有解决方法。

【问题讨论】:

  • 因为这就是 JavaScript 在加载时将具有的变量。 JavaScript 无法访问 PHP someFunc,因为前者是客户端语言(运行在用户机器上),后者是服务器端(运行在服务器上)。

标签: php javascript static global


【解决方案1】:

PHP 是一个服务器端脚本,它在 JavaScript 加载到用户浏览器之前很久就运行并完成。

这意味着 PHP 函数将在服务器将页面发送到客户端时运行一次。查看源代码客户端。它看起来像这样:

<script>
     function someFunc() {
         var x = 0;
         while (++x<=31) {
             1
         }
     }
</script> 

您不能以您尝试的方式混合使用 javascript 和 PHP。对于这么简单的事情,如果您需要服务器端资源,您将使用所有 PHP,如果不需要,则使用所有 javascript。如果您在页面加载完成后需要服务器端资源,则需要研究 AJAX。

【讨论】:

    【解决方案2】:

    下面的代码被解释为纯文本,不会被执行。

    <script>
        function someFunc() {
            var x = 0;
            while (++x<=31) {
                <?php echo someFunc(); ?>  // EXCEPT FOR THIS LINE
            }
        }
    </script>
    

    &lt;?php echo someFunc(); ?&gt; 执行一次并返回 1。

    PHP 在服务器端执行 - JavaScript 客户端。

    您有效地生成以下文本并传递给浏览器:

    <script>
        function someFunc() {
            var x = 0;
            while (++x<=31) {
                1
            }
        } 
    </script>
    

    【讨论】:

      【解决方案3】:

      javascript 不会调用你的 php 函数,他没有连接。您只是在页面呈现时回显 php someFunc() 的返回。

      【讨论】:

        【解决方案4】:

        所以php和js不是同时执行的,php在服务器上执行,发送到浏览器,浏览器再执行js。

        因此,发送到浏览器的内容是:

        <script>
            function someFunc() {
                var x = 0;
                while (++x<=31) {
                    1
                }
            }
        </script>
        

        php someFunc() 会运行一次,因为此时 js inst 循环。

        【讨论】:

        • 猜猜我会尝试一些AJAX然后......因为我确实需要他们像这样混合......嗯......谢谢大家!你帮了很多忙。 :D
        • @Cweener: 不要感谢他.. 选择他的答案并给他加分 ;-)
        猜你喜欢
        • 1970-01-01
        • 2013-02-08
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        • 1970-01-01
        相关资源
        最近更新 更多