Late Static Bindings
تستخدم للاشارة للكلاس المستدعى من التوريث والموجود فيه محتوى من نوع static وذلك عن طريق استخدام static::
can be used to reference the called class in a context of static inheritance.
مثال
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // Here comes Late Static Bindings
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test();
الناتج هنا هو B اما لو تم استخدام B::test(); فسيكون الناتج A
مثال اخر لاستخدامها مع محتوى non static
<?php
class TestChild extends TestParent {
public function __construct() {
static::who();
}
public function test() {
$o = new TestParent();
}
public static function who() {
echo __CLASS__."\n";
}
}
class TestParent {
public function __construct() {
static::who();
}
public static function who() {
echo __CLASS__."\n";
}
}
$o = new TestChild;
$o->test();
?>
عندما قمنا بعمل instantiation $o = new TestChild;
تم تنفيذ ال constructor وبالتالى تم تنفيذ static::who();
والتى ستقوم بالاشارة الى الكلاس المستدعى وهو ال child
اما عندما تم تنفيذ الامر $o->test(); فسوف يقوم بتنفيذ الدالة test(); والتى ستقوم بعمل new TestParent(); والتى ستقوم بتنفيذ ال constructor الخاص بال parent وبالتالى طباعة اسم الكلاس المستدعى وهو parent
The above example will output:
TestChildTestParent
اما لز قمنا باستخدام parent او self فسوف يقوم بعمل forward الى الكلاس المستدعى