2011-08-10 64 views
1

我在使用php的靜態變量時遇到了一些問題。我從另一個JS函數調用php函數,並且靜態變量不增加。它不是嗎?靜態變量的問題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

因爲這是JavaScript的將是在負載時間的變量。 JavaScript不能訪問PHP'someFunc',因爲第一種是客戶端語言(在用戶機器上運行),後者是服務器端(在服務器上運行)。 – Shef

回答

4

PHP是一個服務器端腳本,它在JavaScript甚至加載到用戶瀏覽器之前運行並完成。

這意味着PHP函數將在服務器將頁面發送到客戶端時運行一次。看看客戶端的源代碼。它看起來像這樣:

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

你不能以你嘗試的方式混用JavaScript和PHP。對於這樣簡單的事情,如果您需要服務器端資源,則可以使用所有PHP,否則使用全部JavaScript。如果您在頁面加載完成後需要服務器端資源,則需要研究AJAX。

0

JavaScript不會打電話給你的PHP功能,他拖着沒有連接。您只是在頁面呈現時迴應php someFunc()的回報。

0

因此,php和js不會同時執行,php會在服務器上執行併發送到瀏覽器,然後執行js。

正因爲如此,什麼被髮送到瀏覽器是:

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

的PHP someFunc(),因爲JS研究所在這個時候一個循環獲取運行一次。

+0

猜猜我會嘗試一些AJAX然後...因爲我需要他們混合像這樣...嗯... 謝謝,雖然傢伙!你有很多幫助。 :D – Cweeener

+1

@Cweener:不要感謝他..選擇他的答案並給他一些觀點;-) – prodigitalson

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>