SORU
17 Ocak 2011, PAZARTESİ


__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
17 Ocak 2011, PAZARTESİ


__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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FF Radio

    FF Radio

    16 Mayıs 2008
  • Kayla Caton - Peet

    Kayla Caton

    23 HAZİRAN 2012
  • L- Crysis

    L- Crysis

    30 Aralık 2011