Trong PHP, phạm vi của biến (scope) xác định nơi mà biến có thể được truy cập và sử dụng. Có ba phạm vi chính cho biến trong PHP:
1. Phạm vi toàn cục (Global Scope)
Biến toàn cục là biến được khai báo bên ngoài bất kỳ hàm hoặc lớp nào. Biến này có thể được truy cập ở bất kỳ đâu trong mã, nhưng cần phải sử dụng từ khóa global
để truy cập từ bên trong hàm.
Ví dụ:
$globalVar = "Tôi là biến toàn cục";
function showGlobalVar() {
global $globalVar; // Sử dụng từ khóa global để truy cập biến toàn cục
echo $globalVar;
}
showGlobalVar(); // In ra: Tôi là biến toàn cục
2. Phạm vi cục bộ (Local Scope)
Biến cục bộ là biến được khai báo bên trong một hàm. Biến này chỉ có thể được truy cập và sử dụng trong phạm vi của hàm đó. Sau khi hàm thực thi, biến cục bộ sẽ không còn tồn tại.
Ví dụ:
function showLocalVar() {
$localVar = "Tôi là biến cục bộ";
echo $localVar; // Có thể truy cập và sử dụng biến cục bộ
}
showLocalVar(); // In ra: Tôi là biến cục bộ
// echo $localVar; // Lỗi: Không thể truy cập biến cục bộ
3. Phạm vi tĩnh (Static Scope)
Biến tĩnh là biến được khai báo với từ khóa static
bên trong một hàm. Biến này sẽ giữ giá trị của nó giữa các lần gọi hàm, và chỉ có thể được truy cập trong phạm vi của hàm đó.
Ví dụ:
function countCalls() {
static $count = 0; // Khai báo biến tĩnh
$count++;
echo "Hàm đã được gọi $count lần.n";
}
countCalls(); // In ra: Hàm đã được gọi 1 lần.
countCalls(); // In ra: Hàm đã được gọi 2 lần.
4. Phạm vi lớp (Class Scope)
Biến trong lớp (thuộc tính) có thể được khai báo với từ khóa public
, protected
, hoặc private
. Các thuộc tính này có thể được truy cập trong các phương thức của lớp và có thể được truy cập từ bên ngoài (nếu là public).
Ví dụ:
class MyClass {
public $publicVar = "Tôi là thuộc tính công khai";
private $privateVar = "Tôi là thuộc tính riêng tư";
public function showVars() {
echo $this->publicVar; // Có thể truy cập thuộc tính công khai
echo $this->privateVar; // Có thể truy cập thuộc tính riêng tư
}
}
$obj = new MyClass();
$obj->showVars(); // In ra: Tôi là thuộc tính công khaiTôi là thuộc tính riêng tư
// echo $obj->privateVar; // Lỗi: Không thể truy cập thuộc tính riêng tư từ bên ngoài
Kết luận
- Phạm vi toàn cục: Biến được khai báo bên ngoài hàm, có thể truy cập từ bất kỳ đâu với từ khóa
global
.
- Phạm vi cục bộ: Biến được khai báo trong hàm, chỉ có thể truy cập trong hàm đó.
- Phạm vi tĩnh: Biến được khai báo với từ khóa
static
, giữ giá trị giữa các lần gọi hàm.
- Phạm vi lớp: Biến (thuộc tính) trong lớp, có thể có các mức độ truy cập khác nhau (public, protected, private).