PHP - 變數作用域



在 PHP 中,變數的作用域是指變數定義和可訪問的上下文範圍。通常,一個簡單的順序 PHP 指令碼,沒有迴圈或函式等,只有一個作用域。在“<?php”和“?>”標籤內宣告的任何變數,從定義點開始在整個程式中都可用。

根據作用域,PHP 變數可以是以下三種類型之一:

主指令碼中的變數也可以提供給透過includerequire語句包含的任何其他指令碼。

示例

在以下示例中,“test.php”指令碼包含在主指令碼中。

main.php

<?php
   $var=100;
   include "test.php";
?>

test.php

<?php
   echo "value of \$var in test.php : " . $var;
?>

當執行主指令碼時,它將顯示以下輸出

value of $var in test.php : 100

但是,當指令碼具有使用者定義的函式時,函式內部的任何變數都具有區域性作用域。因此,在函式內部定義的變數無法在外部訪問。在函式外部(上方)定義的變數具有全域性作用域。

示例

請檢視以下示例:

<?php
   $var=100;   // global variable
   function myfunction() {
      $var1="Hello"; 	// local variable
      echo "var=$var  var1=$var1" . PHP_EOL;
   }
   myfunction();
   echo "var=$var  var1=$var1" . PHP_EOL; 
?>

它將產生以下輸出

var=  var1=Hello
var=100  var1=

PHP Warning:  Undefined variable $var in /home/cg/root/64504/main.php on line 5
PHP Warning:  Undefined variable $var1 in /home/cg/root/64504/main.php on line 8

注意,全域性變數不會自動在函式的區域性作用域內可用。此外,函式內部的變數在外部不可訪問。

“global”關鍵字

要啟用在函式的區域性作用域內訪問全域性變數,應使用“global”關鍵字顯式執行此操作。

示例

PHP 指令碼如下:

<?php
   $a=10; 
   $b=20;
   echo "Global variables before function call: a = $a b = $b" . PHP_EOL;
   function myfunction() {
      global $a, $b;
      $c=($a+$b)/2;
      echo "inside function a = $a b = $b c = $c" . PHP_EOL;
      $a=$a+10;
   }
   myfunction();
   echo "Variables after function call: a = $a b = $b c = $c";
?>

它將產生以下輸出

Global variables before function call: a = 10 b = 20
inside function a = 10 b = 20 c = 15
Variables after function call: a = 20 b = 20 c = 
PHP Warning:  Undefined variable $c in /home/cg/root/48499/main.php on line 12

現在可以在函式內部處理全域性變數。此外,在函式內部對全域性變數所做的任何更改都將反映在全域性名稱空間中。

$GLOBALS 陣列

PHP 將所有全域性變數儲存在一個名為$GLOBALS的關聯陣列中。變數的名稱和值構成鍵值對。

示例

在以下 PHP 指令碼中,使用 $GLOBALS 陣列訪問全域性變數:

<?php
   $a=10; 
   $b=20;
   echo "Global variables before function call: a = $a b = $b" . PHP_EOL;

   function myfunction() {
      $c=($GLOBALS['a']+$GLOBALS['b'])/2;
      echo "c = $c" . PHP_EOL;
      $GLOBALS['a']+=10;
   }
   myfunction();
   echo "Variables after function call: a = $a b = $b c = $c";
?>

它將產生以下輸出

Global variables before function call: a = 10 b = 20
c = 15
PHP Warning:  Undefined variable $c in C:\xampp\htdocs\hello.php on line 12
Variables after function call: a = 20 b = 20 c =

靜態變數

使用static關鍵字定義的變數不會在每次呼叫函式時都初始化。此外,它保留了前一次呼叫的值。

示例

請檢視以下示例:

<?php
   function myfunction() {
      static $x=0;
      echo "x = $x" . PHP_EOL;
      $x++;
   }
   for ($i=1; $i<=3; $i++) {
      echo "call to function :$i : ";
      myfunction();
   }
?>

它將產生以下輸出

call to function :1 : x = 0
call to function :2 : x = 1
call to function :3 : x = 2
廣告