Saat Anda menggunakan selfuntuk merujuk ke anggota kelas, Anda merujuk ke kelas di mana Anda menggunakan kata kunci. Dalam kasus ini, Fookelas Anda mendefinisikan properti statis yang dilindungi yang disebut $bar. Saat Anda menggunakan selfdi Fookelas untuk merujuk ke properti, Anda merujuk ke kelas yang sama.
Oleh karena itu jika Anda mencoba untuk menggunakan self::$bartempat lain di Anda Fookelas tetapi Anda memiliki Barkelas dengan nilai yang berbeda untuk properti, itu akan menggunakan Foo::$barbukan Bar::$bar, yang mungkin tidak apa yang Anda berniat:
class Foo
{
protected static $bar = 1234;
}
class Bar extends Foo
{
protected static $bar = 4321;
}
Saat Anda memanggil metode lewat static, Anda memanggil fitur yang disebut late static bindings (diperkenalkan di PHP 5.3).
Dalam skenario di atas, penggunaan selfakan menghasilkan Foo::$bar(1234). Dan menggunakan staticakan menghasilkan Bar::$bar(4321) karena with static, interpreter memperhitungkan deklarasi ulang dalam Barkelas selama runtime.
Anda biasanya menggunakan binding statis terbaru untuk metode atau bahkan kelas itu sendiri, daripada properti, karena Anda tidak sering mendeklarasikan ulang properti di subkelas; contoh penggunaan statickata kunci untuk memanggil konstruktor terikat-akhir dapat ditemukan dalam pertanyaan terkait ini: Diri baru vs. statis baru
Namun, itu juga tidak menghalangi penggunaan staticwith properti.