Giới thiệu
Trong class PHP, property và method khai báo với từ khóa static không thể truy cập bằng object với toán tử ->. Thực tế, object không cần thiết để truy cập bất kỳ instance nào của class. Default visibility của static item trong class là public.
Static Properties
Để truy cập static property từ bên ngoài class, dùng scope resolution operator (::) cùng tên class. Biến string evaluate thành tên class cũng truy cập được static property.
<?php
class TestClass {
static $name = "test";
}
echo TestClass::$name;
$var = "TestClass";
echo $var::$name;
?>
Để dùng static property bên trong method cùng class, dùng từ khóa self thay vì -> (dùng cho instance property).
<?php
class TestClass {
static $name = "test";
public function test() {
echo self::$name;
}
}
$obj = new TestClass();
$obj->test();
?>
Static property khai báo trong parent class có thể tham chiếu trong child class method bằng từ khóa parent cùng scope resolution operator.
<?php
class TestClass {
static $name = "test";
public function test() {
echo self::$name;
}
}
class MyClass extends TestClass {
public function mytest() {
echo parent::$name;
}
}
$obj = new MyClass();
$obj->mytest();
?>
Static Methods
Khi method khai báo static, pseudo-variable $this không khả dụng cho nó. Do đó, instance attribute của class không thể truy cập trong static method. Static method được gọi bằng tên class cùng scope resolution operator.
Ví dụ: Đếm số object tạo ra
<?php
class TestClass {
static $count = 0;
function __construct() {
self::$count++;
}
static function showcount() {
echo "count = " . self::$count;
}
}
$a = new TestClass();
$b = new TestClass();
$c = new TestClass();
TestClass::showcount();
?>
Kết quả
count = 3