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.
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.
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.
Để 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 ".
Đ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.
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ị.
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 =
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 đó.
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