Dalam pengaturcaraan berorientasikan objek PHP, anda akan sentiasa menghadapi
class test{ public static function test(){ self::func(); static::func(); } public static function func(){} }
Tetapi adakah anda tahu perbezaan antara diri dan statik?
Malah, perbezaannya sangat mudah Anda hanya perlu menulis beberapa demo untuk memahami:
Demo untuk diri sendiri:
class Car { public static function model(){ self::getModel(); } protected static function getModel(){ echo "This is a car model"; } }
Kereta::model();
Class Taxi extends Car { protected static function getModel(){ echo "This is a Taxi model"; } }
Teksi::model();
Dapatkan output
This is a car model This is a car model
Anda boleh mendapati bahawa diri masih akan memanggil kaedah kelas induk dalam subkelas
Demo untuk statik
class Car { public static function model(){ static::getModel(); } protected static function getModel(){ echo "This is a car model"; } } Car::model(); Class Taxi extends Car { protected static function getModel(){ echo "This is a Taxi model"; } } Taxi::model();
Dapatkan output
This is a car model This is a Taxi model
Anda boleh melihat bahawa apabila memanggil statik, walaupun subkelas memanggil kaedah kelas induk, kaedah yang dipanggil dalam kaedah kelas induk akan tetap menjadi kaedah subkelas (sangat mengelirukan...)
Sebelum versi PHP5.3, masih terdapat sedikit perbezaan antara statik dan diri Apa sebenarnya, semuanya dikuasai oleh versi 7. Saya tidak akan memahaminya lagi.
Ringkasannya ialah: diri hanya boleh merujuk kepada kaedah dalam kelas semasa dan kata kunci statik membenarkan fungsi untuk mengikat kaedah secara dinamik dalam kelas semasa masa jalan.