PHP變數作用域的跨程式碼區塊範圍
P粉771233336
P粉771233336 2023-08-24 13:06:58
0
2
602
<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粉771233336
P粉771233336

全部回覆(2)
P粉617237727

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

$user_info ....... //在外部声明

function foo(){
   global $user_info // 现在也可以在这里使用

   // 更多代码
}

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

P粉466909449

您將太多的意義放在了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實例,對先前的呼叫一無所知,喚醒等等
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板