Saat Anda menggunakan self
untuk merujuk ke anggota kelas, Anda merujuk ke kelas di mana Anda menggunakan kata kunci. Dalam kasus ini, Foo
kelas Anda mendefinisikan properti statis yang dilindungi yang disebut $bar
. Saat Anda menggunakan self
di Foo
kelas untuk merujuk ke properti, Anda merujuk ke kelas yang sama.
Oleh karena itu jika Anda mencoba untuk menggunakan self::$bar
tempat lain di Anda Foo
kelas tetapi Anda memiliki Bar
kelas dengan nilai yang berbeda untuk properti, itu akan menggunakan Foo::$bar
bukan 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 self
akan menghasilkan Foo::$bar
(1234). Dan menggunakan static
akan menghasilkan Bar::$bar
(4321) karena with static
, interpreter memperhitungkan deklarasi ulang dalam Bar
kelas 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 static
kata kunci untuk memanggil konstruktor terikat-akhir dapat ditemukan dalam pertanyaan terkait ini: Diri baru vs. statis baru
Namun, itu juga tidak menghalangi penggunaan static
with properti.