SORU
6 Mayıs 2009, ÇARŞAMBA


Örnek özellikleri PHP dinamik olarak oluşturabilir miyim?

Tüm örnek oluşturmak için herhangi bir yolu özellikleri dinamik olarak var mı? Örneğin, sınıfın bu örneği sonra yapıcı tüm nitelikleri oluşturur ve hala onlara erişmek mümkün olmak istiyorum: $object->property. Özelliklerini ayrı ayrı erişim istiyorum unutmayın, ve bir dizi kullanarak değil; burada ne bir örnekyokistiyorum:

class Thing {
    public $properties;
    function __construct(array $props=array()) {
        $this->properties = $props;
    }
}
$foo = new Thing(array('bar' => 'baz');
# I don't want to have to do this:
$foo->properties['bar'];
# I want to do this:
//$foo->bar;

Daha spesifik, ne zaman ne ile uğraştığımı sınıflar var çok sayıda özellikleri hoşuma gider seçim yapabilme tüm sütunları veritabanı (hangi temsil özellikleri ve örnek oluştur özellikleri onları. Her bir sütun değerinin ayrı örnek bir özellik saklanmalıdır.

CEVAP
6 Mayıs 2009, ÇARŞAMBA


Bir bakıma. Kendi kodlamam zamanında sınıf davranışı uygulamak için kanca sağlayan sihirli yöntem vardır:

class foo {
  public function __get($name) {
    return('dynamic!');
  }
  public function __set($name, $value) {
    $this->internalData[$name] = $value;
  }
}

Bu nesne özelliği erişildiğinde davranış çalıştırmaya olanak sağlar dinamik alıcı ve ayarlayıcı yöntemleri için bir örnek. Örneğin

print(new foo()->someProperty);

baskı, bu durumda, "dinamik!" ve bu durumda __set keyfi adlı bir özellik için bir değer atayabilirsiniz() yöntemi sessizce çağrılır. __Call($isim, $parametreler) yöntemi nesnenin yöntem çağrıları için aynı işi yapar. Çok kullanışlı özel bir durumda. Ama çoğu zaman, bir ev almak

class foo {
  public function __construct() {
    foreach(getSomeDataArray() as $k => $value)
      $this->{$k} = $value;
  }
}

bir zamanlar ...çoğunlukla, gereken, çünkü buna sınıf alanları adlı bir dizinin içeriğini dökümü için, ya da en azından yürütme çok açık noktalarda yol. Gerçekten dinamik davranışı gerek yoksa, veri ile nesneleri doldurmak için bunun son örneği.

Bu aşırı yükleme denir http://php.net/manual/en/language.oop5.overloading.php

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Emotional Trancer

    Emotional Tr

    4 Mart 2010
  • laptopmag

    laptopmag

    25 Ocak 2008
  • Liz Morgan

    Liz Morgan

    4 Aralık 2011