__PHP get ve __set sihirli yöntemler
Tamamen yanılmıyorsam, __get
__set
yöntemleri → get
set
aşırı yükleme izin vermek gerekiyor.
Örneğin, aşağıdaki ifadeleri __get
yöntemi çağırmak gerekir:
echo $foo->bar;
$var = $foo->bar;
Ve aşağıdaki __set
yöntemi kullanmanız gerekir:
$foo->bar = 'test';
Bu benim kod çalışmıyor, ve bu basit örnekle tekrarlanabilir
class foo {
public $bar;
public function __get($name) {
echo "Get:$name";
return $this->$name;
}
public function __set($name, $value) {
echo "Set:$name to $value";
$this->$name = $value;
}
}
$foo = new foo();
echo $foo->bar;
$foo->bar = 'test';
echo "[$foo->bar]";
Bu sadece sonuç
[test]
Orada die()
bazı aramalar koyarak hiç isabet olmadığını gösterir.
Şimdi, biraz önce söylediğim canı cehenneme, ben sadece el kullanarak __get
nereye bu ihtiyaç için şimdi, ama çok dinamik ve bilgi gerektirir bu 'aşırı' kod aslında değil denilen sürece özellikle aradı. Eğer bu da gerektiğini anladım yol çalışması gerekiyordu değilse veya bu çalışmıyor neden bilmek istiyorum.
Bu php 5.3.3
üzerinde çalışıyor.
CEVAP
__get
, __set
, __call
ve __callStatic
bir yöntem veya özellik erişilemez olduğunda çağrılır. $bar
ortak olduğunu ve bu yüzden ulaşılmaz değil.
section on Property Overloading in the manual: bkz
__set()
erişilemeyen özellikler için veri yazarken çalıştırın.__get()
erişilemeyen özellikler veri okumak için kullanılır.
Sihirli yöntemler alıcıları ve ayarlayıcıları için uygulanmamalıdır. Onlar sadece başka bir hata neden olur bu yöntem çağrıları ya da özellik erişimi ele verir. Gibi, çok fazla hata işleme ile ilgili. Ayrıca alıcı ve ayarlayıcı veya doğrudan uygun yöntem çağrılarını kullanarak daha yavaş olduğunu unutmayın.
Neden python 'sihirli yöntemler m...
Çizim Yumuşak Eğriler - Yöntemler Gere...
Derleme Öznitelikleri kullanmak için e...
Nasıl NUnit ile özel yöntemler test mu...
Neden Python 3.x'In super() sihir...