Ben PHP sihirli __ çağrı yöntemini kullanıyorum. Bazen arama fonksiyonu bir sayıdır. Örneğin sınıf adı örnektir, o zaman bazen 32 :: örnek aramak istiyorum
Bu mümkün mü yoksa başka bir alternatif bakmak gerekir.
Tabii bu mümkün. Sadece çağrı sözdizimi değiştirmek gerekir. $foo->32() geçerli değil ve ölümcül bir hata verecektir. Ama $foo->{'32'}() geçerli sözdizimi. Şimdi, bir işlev 32 tanımlamak değil, ama bunu çalıştırmak için __ çağrısı kullanabilirsiniz ...
class Foo {
public function __call($f, $args) {
echo $f;
}
}
$foo = new Foo;
$foo->32(); //Fatal Error
$foo->{32}(); //Fatal Error
$foo->{'32'}(); // "32" is printed
$x = 32;
$foo->$x(); //Fatal Error
$x = '32';
$foo->$x(); // "32" is printed
$x = 32;
$foo->{(string)$x}(); // "32" is printed
call_user_func(array($foo, '32')); // "32" is printed
Veya statik yöntemleri ile 5.3, biraz zorlaşıyor:
class Foo {
public static function __callStatic($f, $args) {
echo $f;
}
}
Foo::32(); //Fatal Error
Foo::{32}(); //Fatal Error
Foo::{'32'}(); //Fatal Error
$x = 32;
Foo::$x(); //Fatal Error
$x = '32';
Foo::$x(); // "32" is printed
$x = 32;
Foo::{(string)$x}(); //Fatal Error
call_user_func(array('foo', '32')); //Fatal Error
32 geçerli bir özellik adı değil gibi Hayır, bu mümkün değildir. Sen bir ayrıştırma hatası gibi alırsınız:
T_STRING veya T_VARIABLE veya '$' bekliyor, sözdizimi hatası, beklenmedik T_LNUMBER ...: hatası Ayrıştırma
Ayrıca example::32 (example::32() 32 geçerli bir isim olurdu eğer statik bir nitelik ve bir yönteme başvurmak, ancak {kullanmanız gerekir [(3 )]} a>) bu çağrıları almak için.
Olmayan varolan özelliklerini erişmek istiyorsanız, __set a> yerine magic methods __get kullanmak.