Diri baharu vs. statik baharu dalam PHP: Keserasian dan Perbezaan
Menukar kod PHP 5.3 kepada PHP 5.2 selalunya menimbulkan cabaran disebabkan perubahan sintaksis . Satu cabaran sedemikian timbul daripada penggunaan pengikatan statik lewat, khususnya penggunaan return new static($options);. Menggantikan statik dengan diri dalam konteks ini mungkin tidak menghasilkan hasil yang sama.
Memahami Perbezaan
self merujuk kepada kelas di mana kata kunci baharu ditakrifkan, manakala statik , yang diperkenalkan dalam ciri pengikatan statik lewat PHP 5.3, merujuk kepada kelas dalam hierarki di mana kaedah itu dipanggil.
Akibat Penggunaan diri baharu dalam PHP 5.2
Menggantikan statik dengan diri sendiri dalam PHP 5.2 akan mengakibatkan tingkah laku yang tidak jelas. self akan sentiasa merujuk kepada kelas di mana kaedah ditakrifkan, tanpa mengira kelas di mana ia digunakan. Ini boleh membawa kepada instantiasi objek dan ketidakkonsistenan yang salah.
Contoh
Pertimbangkan kod berikut:
class Animal { public static function getInstance() { return new self(); } } class Dog extends Animal { public static function getInstance() { return new static(); } }
Dalam PHP 5.3, memanggil Dog: :getInstance() akan mengembalikan instance Dog, sambil memanggil Animal::getInstance() akan mengembalikan instance of Animal.
Walau bagaimanapun, dalam PHP 5.2, kedua-dua panggilan akan mengembalikan contoh Animal kerana self dalam kedua-dua kaedah akan merujuk kepada Animal.
Kesimpulan
Walaupun diri baharu dan statik baharu adalah bersamaan dalam PHP 5.3, ia berbeza dengan ketara dalam PHP 5.2. Menukar statik baharu($options) kepada new self($options) dalam PHP 5.2 mungkin menghasilkan hasil yang salah dan tiada penyelesaian yang diketahui untuk isu ini.
Atas ialah kandungan terperinci PHP 5.2 vs. PHP 5.3: `new static()` vs. `new self()` – Apakah Perbezaan Utama dan Isu Keserasian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!