Проблемы со статической переменной PHP - PullRequest
1 голос
/ 10 августа 2011

У меня возникли проблемы со статической переменной в php.Я вызываю функцию php из другой функции JS, и статическая переменная не увеличивается.Разве это не должно быть?

Вот что-то вроде того, что я пытаюсь сделать (просто очень упрощенно);

<?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 ]

4 голосов
/ 10 августа 2011

PHP - это серверный скрипт, который запускается и завершается задолго до того, как JavaScript загружается в браузер пользователя.

Это означает, что функция PHP будет запускаться один раз, когда сервер отправляет страницу клиенту.Посмотрите на исходный код на стороне клиента.Это выглядит так:

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

Вы не можете смешивать JavaScript и PHP так, как пытаетесь.Для чего-то такого простого, вы бы использовали весь PHP, если вам нужны ресурсы на стороне сервера, или весь JavaScript, если нет.Если вам нужны ресурсы на стороне сервера ПОСЛЕ того, как страница закончила загрузку, вам следует изучить AJAX.

1 голос
/ 10 августа 2011

Код ниже интерпретируется как обычный текст и не выполняется.

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

Хотя <?php echo someFunc(); ?> выполняется один раз и возвращает 1.

PHP выполняется на стороне сервера - клиентская часть JavaScript.

Вы эффективно сгенерировали следующий текст и передали в браузер:

<script>
    function someFunc() {
        var x = 0;
        while (++x<=31) {
            1
        }
    } 
</script>
0 голосов
/ 10 августа 2011

Таким образом, php и js не выполняются одновременно, php выполняется на сервере и отправляется в браузер, который затем выполняет js.

Из-за этого в браузер отправляется:

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

php someFunc () запускается один раз, потому что в это время js inst зацикливается.

0 голосов
/ 10 августа 2011

Javascript не будет вызывать вашу функцию php, он не подключен.Вы просто повторяете возврат php someFunc() во время отображения страницы.

...