PHP 程式碼區塊之間的變數範圍
P粉403821740
P粉403821740 2023-10-22 14:41:03
0
2
738

我(仍然)是 PHP 新手,並且持續學習。

我經常需要檢索某個變數並存取其屬性。

<?php
      $id = $_REQUEST['id'];
      $user_info = get_userdata($id);

      echo('Username: '        . $user_info->user_login . "<br>");
      echo('User level: '      . $user_info->user_level . "<br>");
      echo('User ID: '         . $user_info->ID . "<br>");
      echo('First Name: '      . $user_info->user_firstname . "<br>");
      echo('Family Name: '     . $user_info->user_lastname . "<br>");
      echo('user_registered: ' . $user_info->user_registered . "<br>");
?>

我比較願意檢索一次 $user_info = get_userdata($id); ,然後在需要時使用它 在同一個檔案中,但在不同的 <?php?> 區塊

<?php
    $id = $_REQUEST['id'];
    $user_info = get_userdata($id);
?>

<some HTML>

<?php echo $user_info->user_login; ?>

<some HTML>

<?php echo $user_info->user_login; ?>

但我懷疑 $user_info 不能在區塊之間共享,因為它不是全域的。 通常的做法是什麼?

P粉403821740
P粉403821740

全部回覆(2)
P粉713846879

您可以在區塊(循環、if 語句)中使用它,但不能在函數內使用它。為了使其在函數內部工作,您必須使用 global 關鍵字:

$user_info ....... //declared outside

function foo(){
   global $user_info // now available here too

   // more code
}

您可以在官方文件上閱讀有關 PHP 變數作用域的更多資訊 :)

P粉262926195

您在 php 程式碼區塊中賦予了太多含義。
這不是全球性的事。
這些區塊屬於同一個 PHP 腳本。這只是輸出 HTML 的一種巧妙方式,僅此而已。您可以用回顯 HTML 來取代它,不會有絲毫差異。

整個 PHP 腳本立即執行,而不是迭代執行,正如您可能想像的那樣,認為 PHP 區塊在伺服器端執行,然後 HTML 區塊在客戶端執行,然後回到伺服器上的 PHP 區塊邊等。這是錯誤的。
整個 PHP 腳本在伺服器端執行,在瀏覽器中產生純 HTML,然後消失。

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

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

  1. 瀏覽器進行呼叫
  2. PHP 喚醒,建立 HTML 頁面,將其傳送到瀏覽器然後終止
  3. 瀏覽器呈現該 HTML 並將其顯示給使用者。
  4. 用戶點擊連結
  5. 瀏覽器進行呼叫
  6. 另一個 PHP 實例,對先前的呼叫一無所知,被喚醒等等
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板