Intro
PHP memungkinkan Anda untuk membebani panggilan metode dan akses properti dengan mendeklarasikan metode ajaib di kelas. Ini memungkinkan kode seperti:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
Terlepas dari kelebihan instance properti dan metode, karena PHP 5.3.0 kita juga bisa membebani static
panggilan metode dengan mengganti metode ajaib __callStatic
.
Sesuatu yang hilang
Apa yang jelas hilang dari fungsionalitas yang tersedia adalah kemampuan untuk membebani properti statis , misalnya:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
Batasan ini jelas didokumentasikan :
Properti overloading hanya berfungsi dalam konteks objek. Metode ajaib ini tidak akan dipicu dalam konteks statis. Oleh karena itu metode ini tidak boleh dinyatakan
static
. Pada PHP 5.3.0, peringatan dikeluarkan jika salah satu metode overloading ajaib dinyatakanstatic
.
Tapi kenapa?
Pertanyaan saya adalah:
- Apakah ada alasan teknis bahwa fungsi ini saat ini tidak didukung? Atau mungkin alasan politik (ngeri)?
- Pernahkah ada upaya yang dibatalkan untuk menambahkan fungsi ini di masa lalu?
Yang paling penting, pertanyaannya bukan "bagaimana saya bisa memiliki properti statis dinamis di userland PHP?". Yang mengatakan, jika Anda mengetahui implementasi yang sangat lucu berdasarkan pada __callStatic
yang ingin Anda bagikan maka tentu saja melakukannya.
__getStatic()
dan__setStatic()
pada kelas-kelas statis , masih berguna untuk memiliki fungsi ini untuk kelas-kelas instantiable. Apakah Anda mengetahui adanya gerakan ke arah ini?