首頁  >  問答  >  主體

PHP變數作用域的跨程式碼區塊範圍

<p>我對PHP還很陌生,不斷在學習。 </p> <p>我經常需要檢索特定的變數並存取它的屬性。 </p> <pre class="brush:php;toolbar:false;"><?php $id = $_REQUEST['id']; $user_info = get_userdata($id); echo('使用者名稱: ' . $user_info->user_login . "<br>"); echo('使用者等級: ' . $user_info->user_level . "<br>"); echo('用戶ID: ' . $user_info->ID . "<br>"); echo('名字: ' . $user_info->user_firstname . "<br>"); echo('姓氏: ' . $user_info->user_lastname . "<br>"); echo('註冊時間: ' . $user_info->user_registered . "<br>"); ?></pre> <p>我比較喜歡在同一個檔案中的不同<code><?php?></code>區塊中一次檢索<code>$user_info = get_userdata($id);</ code>,然後在需要時使用它。 </p> <pre class="brush:php;toolbar:false;"><?php $id = $_REQUEST['id']; $user_info = get_userdata($id); ?> <一些HTML> <?php echo $user_info->user_login; ?> <一些HTML> <?php echo $user_info->user_login; ?></pre> <p>但我懷疑<code>$user_info</code>不能在區塊之間共享,因為它不是全域的。這種情況下通常的做法是什麼? </p>
P粉771233336P粉771233336445 天前596

全部回覆(2)我來回復

  • P粉617237727

    P粉6172377272023-08-25 09:32:59

    你可以在程式碼區塊中使用它(循環,條件語句),但不能在函數內使用。如果要在函數內使用它,你需要使用global關鍵字:

    $user_info ....... //在外部声明
    
    function foo(){
       global $user_info // 现在也可以在这里使用
    
       // 更多代码
    }

    你可以在官方文件中了解更多關於PHP變數作用域的內容 :)

    回覆
    0
  • P粉466909449

    P粉4669094492023-08-25 09:01:17

    您將太多的意義放在了php程式碼區塊中。
    這不是一個全局的東西。
    這些區塊屬於同一個PHP腳本。這只是一種漂亮的輸出HTML的方式,沒有其他意義。您可以用echo HTML來取代它,沒有任何區別。

    整個PHP腳本一次執行,不是以迭代方式執行,就像您可能想像的那樣,認為PHP區塊在伺服器端執行,然後HTML區塊在客戶端執行,然後再回到伺服器端執行PHP區塊,依此類推。這是錯誤的。
    整個PHP腳本在伺服器端執行,結果在瀏覽器中顯示純HTML,然後結束。

    這就是為什麼您不能在同一個PHP腳本中同時編寫HTML表單和其處理程序,只需將後者放在前者之後。您必須再次呼叫伺服器才能使處理程序運作。這將是完全另一個調用,同一個腳本的另一個實例,對先前的調用一無所知,先前的調用早已結束。這也是您必須了解的PHP的另一件事:

    PHP腳本的執行是原子的。它不像桌面應用程式在瀏覽器中持續運行,甚至不像與桌面應用程式保持持久連接的守護程式。它更像是一個命令行實用程式-完成工作並退出。它離散地運行:

    1. 瀏覽器發起呼叫
    2. PHP喚醒,建立一個HTML頁面,傳送給瀏覽器然後結束
    3. 瀏覽器渲染HTML並顯示給使用者。
    4. 用戶點擊連結
    5. 瀏覽器發起呼叫
    6. 另一個PHP實例,對先前的呼叫一無所知,喚醒等等

    回覆
    0
  • 取消回覆