Giới thiệu
Trong lập trình, phạm vi đề cập đến phạm vi mà một biến có thể truy cập được. Nói chung, một tập lệnh PHP đơn giản (không có bất kỳ cấu trúc nào như vòng lặp, hàm, v.v.) có một phạm vi duy nhất, theo nghĩa là, một biến có sẵn thông qua chương trình từ thời điểm định nghĩa trở đi.
Biến trong một tập lệnh chính cũng có sẵn cho bất kỳ tập lệnh nào khác được kết hợp với các câu lệnh bao gồm hoặc yêu cầu. Trong ví dụ sau, một tập lệnh test.php được bao gồm trong tập lệnh chính.
Đây là tập lệnh chính
$var=100; include "test.php"; ?>
File test.script bao gồm như sau -
echo "value of of \$var in testscript.php : " . $var; ?>
Khi tập lệnh chính được thực thi, kết quả sau được hiển thị
value of of $var in testscript.php : 100
Tuy nhiên, khi tập lệnh có một chức năng do người dùng xác định, bất kỳ biến nào bên trong đều có phạm vi cục bộ. Do đó, biến được xác định bên trong một funcion không thể được truy cập bên ngoài. Biến được xác định bên ngoài (ở trên) hàm có phạm vi toàn cục.
Ví dụ
<?php $var=100; //global variable function myfunction(){ $var1="Hello"; //local variable echo "var=$var var1=$var1" . "\n"; } myfunction(); echo "var=$var var1=$var1" . "\n"; ?>
Đầu ra
Điều này sẽ tạo ra kết quả sau -
var= var1=Hello var=100 var1= PHP Notice: Undefined variable: var in line 5 PHP Notice: Undefined variable: var1 in line 8
Lưu ý rằng biến toàn cục không tự động có sẵn trong phạm vi chức năng cục bộ. Ngoài ra, không thể truy cập hàm bên trong biến bên ngoài
từ khóa toàn cầu
Quyền truy cập vào biến toàn cục bên trong phạm vi cục bộ nên được bật rõ ràng bằng cách sử dụng từ khóa toàn cầu. Tập lệnh PHP như sau -
Ví dụ
<?php $a=10; $b=20; echo "before function call a = $a b = $b" . "\n"; function myfunction(){ global $a, $b; $c=($a+$b)/2; echo "inside function a = $a b = $b c = $c" . "\n"; $a=$a+10; } myfunction(); echo "after function a = $a b = $b c = $c"; ?>
Đầu ra
Điều này sẽ tạo ra kết quả sau -
before function call a = 10 b = 20 inside function a = 10 b = 20 c = 15 PHP Notice: Undefined variable: c in line 13 after function a = 20 b = 20 c =
Biến toàn cục bây giờ có thể được xử lý bên trong hàm. Hơn nữa, các thay đổi được thực hiện đối với 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
mảng $ GLOBALS
PHP lưu trữ tất cả các biến toàn cục trong một mảng kết hợp được gọi là $ GLOBALS. Tên và giá trị của biến tạo thành cặp khóa-giá trị
Trong tập lệnh PHP sau, mảng $ GLOBALS được sử dụng để truy cập các biến toàn cục -
Ví dụ
<?php $a=10; $b=20; echo "before function call a = $a b = $b" . "\n"; function myfunction(){ $c=($GLOBALS['a']+$GLOBALS['b'])/2; echo "c = $c" . "\n"; $GLOBALS['a']+=10; } myfunction(); echo "after function a = $a b = $b c = $c"; ?>
Đầu ra
before function call a = 10 b = 20 c = 15 PHP Notice: Undefined variable: c line 12 Notice: Undefined variable: c in line 12 after function a = 20 b = 20 c =
biến tĩnh
Một biến được xác định với từ khóa static không được khởi tạo mỗi lần gọi hàm. Hơn nữa, nó vẫn giữ nguyên giá trị của cuộc gọi trước đó
Ví dụ
<?php function myfunction(){ static $x=0; echo "x = $x" . "\n"; $x++; } for ($i=1; $i<=3; $i++){ echo "call to function :$i : "; myfunction(); } ?>
Đầu ra
Điều này sẽ tạo ra kết quả sau
call to function :1 : x = 0 call to function :2 : x = 1 call to function :3 : x = 2