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, __callStatic
paylaş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()