Ý tưởng cốt lõi của late static bindings là khái niệm kế thừa và từ khóa self không tuân theo cùng quy tắc. Ví dụ, phương thức fun trong lớp cha được gọi trong lớp con不会使 self tham chiếu đến lớp con (như mong đợi).
Late static bindings giới thiệu từ khóa static, khi dùng sẽ ràng buộc hàm với lớp runtime (lớp nơi hàm được gọi đầu tiên). Ngoài ra, bất kỳ hàm hoặc biến static nào thường được thực thi tại runtime chứ không phải compile time. Do đó, nếu cần gán giá trị động cho biến static, việc đó xảy ra tại runtime — gọi là late static binding.
Ví dụ
<?php
class student {
public static $my_name = 'Joe';
public static function getName() {
return "Tên sinh viên là: " . self::$my_name;
}
public static function getAge() {
echo static::getName();
}
}
class Professor extends student {
public static function getName() {
return "Tên sinh viên là: " . self::$my_name . " và tuổi 24.";
}
}
student::getAge();
echo "\n";
Professor::getAge();
?>
Kết quả
Tên sinh viên là: Joe Tên sinh viên là: Joe và tuổi 24.
Lớp student có tên và phương thức lấy tên. Lớp Professor kế thừa và ghi đè phương thức. Gọi getAge trên cả hai lớp cho thấy static:: ràng buộc với lớp thực tế gọi.