แนวคิดหลักของ Late Static Bindings คือการสืบทอด (inheritance) และคีย์เวิร์ด self ไม่ปฏิบัติตามกฎเดียวกัน ตัวอย่างเช่น เมธอด 'fun' ในคลาสแม่ที่ถูกเรียกในคลาสลูก จะไม่ทำให้ 'self' อ้างถึงคลาสลูก (ตามที่คาดหวัง)
Late Static Bindings นำเสนอคีย์เวิร์ดใหม่ static ซึ่งเมื่อใช้จะผูกฟังก์ชันกับคลาสรันไทม์ หรือคลาสที่ฟังก์ชันถูกใช้ครั้งแรก นอกจากนี้ ฟังก์ชันหรือตัวแปร static มักถูกประมวลผลในรันไทม์ ไม่ใช่คอมไพล์ไทม์ ดังนั้น หากต้องกำหนดค่าแบบไดนามิกให้ตัวแปร static จะเกิดขึ้นในรันไทม์ เรียกว่า late static binding
ตัวอย่าง
<?php
class student {
public static $my_name = 'Joe';
public static function getName()
{
return "ชื่อนักเรียนคือ: " . self::$my_name;
}
public static function getAge()
{
echo static::getName();
}
}
class Professor extends student {
public static function getName()
{
return "ชื่อนักเรียนคือ: " . self::$my_name . " และอายุ 24 ปี";
}
}
student::getAge();
echo "\n";
Professor::getAge();
?>
ผลลัพธ์
ชื่อนักเรียนคือ: Joe
ชื่อนักเรียนคือ: Joe และอายุ 24 ปี
คลาส student มีตัวแปร static และเมธอด getName ใช้ self::$my_name คลาส Professor extends student และ override getName เรียก static::getName() ใน getAge() ทำให้ใช้เมธอดของคลาสที่เรียกจริง (late binding)