PHP - Variable Scope

Trong PHP, phạm vi của một biến là ngữ cảnh mà trong đó nó được định nghĩa và có thể truy cập. Thông thường, một đoạn mã PHP đơn giản không có vòng lặp hay hàm, v.v., có một phạm vi duy nhất. Bất kỳ biến nào được khai báo bên trong thẻ "<?php" và "?>" đều có sẵn trong toàn bộ chương trình từ điểm định nghĩa trở đi.

Dựa trên phạm vi, một biến PHP có thể thuộc một trong ba loại sau −

  • Local Variables

  • Global Variables

  • Static Variables

Một biến trong một kịch bản chính cũng được cung cấp cho bất kỳ kịch bản nào khác được tích hợp với include hoặc require statements.

Example

Trong ví dụ sau, một script "test.php" được bao gồm trong script chính.

main.php

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

test.php

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

Khi tập lệnh chính được thực thi, nó sẽ hiển thị output

value of $var in test.php : 100

Tuy nhiên, khi kịch bản có một hàm do người dùng định nghĩa, bất kỳ biến nào bên trong hàm đó đều có phạm vi cục bộ. Do đó, một biến được định nghĩa bên trong hàm không thể được truy cập từ bên ngoài. Các biến được định nghĩa bên ngoài (ở trên) hàm có phạm vi toàn cục.

Example

Hãy xem xét ví dụ sau −

<?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; 
?>

Nó sẽ tạo ra output

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

Note rằng một biến toàn cục không tự động có sẵn trong phạm vi cục bộ của một hàm. Ngoài ra, biến bên trong một hàm không thể truy cập từ bên ngoài.

The "global" Keyword

Để kích hoạt quyền truy cập vào một biến toàn cục bên trong phạm vi cục bộ của một hàm, điều này phải được thực hiện một cách rõ ràng bằng cách sử dụng từ khóa " global ".

Example

Đoạn mã PHP như sau −

<?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";
?>

Nó sẽ tạo ra output

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

Các biến toàn cục bây giờ có thể được xử lý bên trong hàm. Hơn nữa, bất kỳ thay đổi nào được thực hiện đối với các biến toàn cục bên trong hàm sẽ được phản ánh trong không gian tên toàn cục.

$GLOBALS Array

PHP lưu trữ tất cả các biến toàn cục trong một mảng liên kết gọi là $GLOBALS . Tên và giá trị của các biến tạo thành cặp khóa-giá trị.

Example

Trong đoạn mã PHP sau, mảng $GLOBALS được sử dụng để truy cập các biến toàn cục −

<?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";
?>

Nó sẽ tạo ra output

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 Variable

Một biến được định nghĩa với từ khóa static không được khởi tạo lại tại mỗi lần gọi hàm. Hơn nữa, nó giữ giá trị của lần gọi trước đó.

Example

Hãy xem xét ví dụ sau −

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

Nó sẽ tạo ra output

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