Saya punya pertanyaan tentang fungsi statis di php.
mari kita asumsikan bahwa saya memiliki kelas
class test {
public function sayHi() {
echo 'hi';
}
}
jika saya melakukannya, test::sayHi();
itu berhasil tanpa masalah.
class test {
public static function sayHi() {
echo 'hi';
}
}
test::sayHi();
bekerja dengan baik.
Apa perbedaan antara kelas satu dan kelas dua?
Apa yang spesial dari fungsi statis?
Jawaban:
Di kelas pertama,
sayHi()
sebenarnya adalah metode instance yang Anda panggil sebagai metode statis dan Anda lolos karenasayHi()
tidak pernah merujuk$this
.Fungsi statis dikaitkan dengan kelas, bukan instance kelas. Karena itu,
$this
tidak tersedia dari konteks statis ($this
tidak mengarah ke objek apa pun).sumber
Sederhananya, fungsi statis berfungsi secara independen dari kelas tempatnya berasal.
$ this artinya, ini adalah objek dari kelas ini. Ini tidak berlaku untuk fungsi statis.
sumber
Perbedaan utamanya adalah, Anda tidak mendapatkan
$this
pasokan di dalam fungsi statis. Jika Anda mencoba menggunakan$this
, Anda akan mendapatkan fileFatal error: Using $this when not in object context
.Baiklah, satu perbedaan lainnya:
E_STRICT
peringatan dihasilkan oleh contoh pertama Anda.sumber
$this
mengacu pada objek saat ini. Dalam fungsi statis, tidak ada objek saat ini; fungsi ada di kelas tanpa perlu atau referensi ke instance objek dari kelas itu.Memanggil metode non-statis secara statis menghasilkan peringatan level E_STRICT.
sumber
Singkatnya, Anda tidak memiliki objek sebagai $ this dalam kasus kedua, karena metode statis adalah fungsi / metode kelas, bukan instance objek.
sumber
Setelah mencoba contoh (PHP 5.3.5), saya menemukan bahwa dalam kedua kasus pendefinisian fungsi Anda tidak dapat menggunakan
$this
operator untuk mengerjakan fungsi kelas. Jadi saya belum bisa menemukan perbedaannya. :(sumber