diri vs ini di PHP

PHP mendukung kelas dan konstruksi berorientasi objek lainnya. Fungsi dan variabel statis di kelas PHP tidak terkait dengan instance kelas apa pun (dengan kata lain, objek). Lihat perbedaan antara objek dan kelas .

Sebaliknya, fungsi dan variabel statis dikaitkan dengan definisi kelas itu sendiri. Dengan kata lain, semua instance kelas berbagi variabel statis yang sama. Dalam konteks metode (fungsi) kelas, variabel dan fungsi statis diakses menggunakan self:: . Metode dan variabel lain digunakan dalam konteks objek (contoh) dari kelas, menggunakan this-> .

Grafik perbandingan

diri versus bagan perbandingan ini
diri ini
Dapat digunakan dalam fungsi statisIyaTidak
variabel dan metode kelas yang dapat diakses dengandiri::$ this-> (Perhatikan bahwa PHP> 5.3 memungkinkan penggunaan $ this dengan variabel statis gunakan $ this :: $ foo. $ this-> foo akan tetap tidak terdefinisi jika $ foo adalah var statis.)
Membutuhkan objek instantiatedTidakIya

diri vs ini di PHP - Contoh

 class exampleClass {public static $ foo; $ bar publik; fungsi publik regularFunction () {echo $ this-> bar; } public static function staticFunction () {echo self :: $ foo; } fungsi public static anotherStatFn () {self :: staticFunction (); } public function regularFnUsingStaticVar () {echo self :: $ foo; } // CATATAN: Pada PHP 5.3 menggunakan $ this :: $ bar bukan self :: $ bar diperbolehkan} exampleClass :: $ foo = "Hello"; $ obj = new exampleClass (); $ obj-> bar = "Dunia!"; exampleClass :: staticFunction (); / * mencetak Hello * / $ obj-> regularFunction (); / * mencetak Dunia! * / 

Fungsi statis hanya dapat menggunakan variabel statis. Fungsi dan variabel statis dirujuk melalui self :: functionName () atau self :: variableName. Dalam contoh yang ditunjukkan di atas, variabel statis direferensikan dengan nama kelas (exampleClass :: $ foo) atau, dengan self :: (self :: $ foo) saat digunakan dalam metode statis [ bernama staticFunction () ] dari kelas .

Fungsi dan variabel reguler suatu kelas membutuhkan konteks objek untuk direferensikan. Mereka tidak dapat eksis tanpa konteks objek. Konteks objek disediakan oleh $ this . Dalam contoh di atas, $ bar adalah variabel reguler dan karenanya dirujuk sebagai $ obj-> bar (dalam konteks objek dengan variabel obj ) atau sebagai $ this-> bar (lagi-lagi dalam konteks objek dalam metode objek) ).

self tidak menggunakan $ sebelumnya karena self tidak berkonotasi dengan variabel tetapi kelas membangun dirinya sendiri. $ this merujuk variabel tertentu sehingga ia memiliki $ sebelumnya.

Artikel Terkait