giriş
PHP, sınıflardaki sihirli yöntemleri bildirerek yöntem çağrılarını ve özellik erişimlerini aşırı yüklemenize izin verir . Bu, aşağıdaki gibi kodları etkinleştirir:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
PHP 5.3.0 sürümünden bu yana, özellik özelliklerini ve yöntemlerini aşırı yüklemenin yanı sıra static, sihirli yöntemi geçersiz kılarak yöntem çağrılarını da aşırı yükleyebiliriz __callStatic.
Eksik bir şey
Mevcut işlevsellikte dikkat çekici bir şekilde eksik olan şey, statik özellikleri aşırı yükleme yeteneğidir , örneğin:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
Bu sınırlama açıkça belgelenmiştir :
Özellik aşırı yüklenmesi yalnızca nesne bağlamında çalışır. Bu sihirli yöntemler statik bağlamda tetiklenmeyecektir. Bu nedenle, bu yöntemler bildirilmemelidir
static. PHP 5.3.0'dan itibaren, sihirli aşırı yükleme yöntemlerinden biri bildirilirse bir uyarı verilirstatic.
Ama neden?
Sorularım:
- Bu işlevin şu anda desteklenmemesinin teknik bir nedeni var mı? Ya da belki de (titrek) bir siyasi neden?
- Geçmişte bu işlevselliği eklemek için iptal edilmiş herhangi bir girişim var mı?
En önemlisi, soru "nasıl kullanıcı PHP PHP dinamik statik özelliklere sahip olabilir?" Değil . Bununla birlikte, __callStaticpaylaşmak istediğinize dayalı özellikle sevimli bir uygulama biliyorsanız, elbette bunu yapın.
__getStatic()ve statik sınıflar için destek öneriyor gibi görünse de, bu işlevselliğin anlık sınıflar için olması yine de yararlı olacaktır. Bu yönde herhangi bir hamlenin farkında mısınız?__setStatic()