Phạm vi của biến là ngữ cảnh trong đó nó được định nghĩa. Cho hầu hết các phần toàn bộ các biến PHP chỉ có một phạm vi đơn. Phạm vi đơn này bao gồm mở rộng và các file được yêu cầu , ví dụ:
$a = 1;
include "b.inc";
Đây là biến $a sẽ có sẵn trong script included b.inc. Tuy nhiên, trong các hàm định nghĩa của người sử dụng một hàm phạm vi cục bộ được giới thiệu. Bất kỳ biến nào được dùng trong một hàm thì được mặc định giới hạn tới hàm phạm vi cục bộ. ví dụ:
$a = 1; /* global scope */ Function Test () {
echo $a; /* reference to local scope variable */ }
Test ();
Script này sẽ không tạo ra bất kỳ đầu ra nào bởi vì cú pháp hiển thị được gán cho một phiên bản biến $a cục bộ, và nó không được gán trị trong phạm vi này. Ta có thể chú ý rằng đây là một điều khác biệt nhỏ từ ngôn ngữ C trong đó các biến toàn cục trong C được tự động gán trị tới các hàm nếu không được tự động hoá việc ghi đè bởi một định nghĩa cục bộ. Điều này có thể dẫn đến một vài vấn đề trong đó mọi người có thể tình cờ thay đổi một biến toàn cục. Trong PHP , các biến toàn cục phải được khai báo tổng thể bên trong một hàm nếu chúng chuẩn bị được dùng trong hàm đó. Ví dụ: $a = 1; $b = 2; Function Sum () { global $a, $b; $b = $a + $b; } Sum (); echo $b;
script trên sẽ cho đầu ra là “3”. Bằng cách khai báo biến tổng thể $a và $b bên trong hàm, toàn bộ các tham chiếu đến các biến đó sẽ được gán cho phiên bản cục bộ. Không có một giới hạn trong số lượng các biến toàn cục mà có thể được thao tác bởi một hàm.
Cách thứ hai để truy cập các biến từ phạm vi toàn cục là bằng cách sử dụng điểm đặc biệt của PHP - định nghĩa mảng $GLOBALS. Ví dụ trước có thể được viết lạ như sau:
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; }
Sum (); echo $b;
Mảng $GLOBALS là một mảng liên kết với tên biến cục bộ có khoá và các nội dung của biến đó có giá trị của phần tử của mảng.
Một đặc điểm quan trọng khác của phạm vi biến là biến tĩnh. Một biến tĩnh chỉ tồn tại trong một hàm phạm vi cục bộ, nhưng nó không làm mất giá trị của nó khi chương trình thực hiện việc thoát khỏi phạm vi này. Giống như ví dụ dưới đây:
Function Test () { $a = 0;
echo $a; $a++; }
Hàm này khá vô ích khi mỗi lần nó được gọi nó thiết lập $a giá trị 0 và in “0”. $a++ tăng lên một đơn vị cho biến $a mỗi khi hàm được gọi. Để tạo một hàm đếm hữu dụng mà không bị mất giá trị hiện tại, biến $a được khai báo tĩnh:
Function Test () { static $a = 0; echo $a; $a++; }
Bây giờ mỗi khi hàm Test()được gọi nó sẽ in giá trị của biến $a và tăng giá trị của nó.
Các biến tĩnh cũng cung cấp một cách để có liên quan đến các hàm đệ qui. Một hàm đệ qui là hàm mà nó gọi chính bản thân nó. Phải cẩn thận khi viết một hàm đệ qui bởi vì nó có thể tạo một lời gọi đệ qui vô hạn định. Ta phải chắn chắn rằng phải có một cách hợp lý để kết thúc lời gọi đệ qui. Ví dụ sau hàm sẽ được gọi đệ qui để đếm đến 10, sử dụng biến tĩnh $count để biết khi kết thúc. Function Test () { static $count = 0; $count++; echo $count; if ($count < 10) { Test (); } $count--; }