Onları üst sınıftan, sadece mevcut nesneleri özellikleri üzerinden değil yineleme?

3 Cevap php

ben başka genişleten bir sınıf var.

i geçerli nesne yineleme zaman ben tüm özellikleri, üst sınıftan gelen hatta bu olsun.

ben sadece geçerli nesnesi üzerinden yineleme istiyorum. ben bunu nasıl yapabilirim?

foreach($this as $key => $value) {
    echo $key . ': ' . $value;
}

3 Cevap

Çok ilginç bir soru.

Çok burada örneklerini okumak için tavsiye eder - http://dsl093-056-122.blt1.dsl.speakeasy.net/edu/oreilly/Oreilly_Web_Programming_bookshelf/webprog/php/ch06_05.htm onlar Introspection hakkında daha fazla fikir verecektir. Kullanılan yöntemler hakkında referans burada - http://www.php.net/manual/en/ref.classobj.php


Burada bir test durumu ile fonksiyonudur. O daha önce mevcut değildi Yansıma kullanır gibi sadece PHP 5 + çalışacaktır. Burada Yansıma hakkında daha fazla bilgi edinebilirsiniz - http://www.php.net/manual/en/class.reflectionclass.php

<?php

echo '<pre>';

class A {
    public $pub_a = 'public a';
    private $priv_a = 'private a';
}

class B extends A {
    public $pub_b = 'public b';
    private $priv_b = 'private b';
}

$b = new B();

print_r(getChildrenProperties($b));

function getChildrenProperties($object) {
    $reflection = new ReflectionClass(get_class($object));
    $properties = array();

    foreach ($reflection->getProperties() as $k=>$v) {
        if ($v->class == get_class($object)) {
            $properties[] = $v;
        }
    }

    return $properties;
}

Siz de deneyin ve kullanımı PHP Reflection http://php.net/manual/en/book.reflection.php olabilir

Ben Ivo Sabev cevap @ kullanılarak ne yapabilirim sanırım:

 $properties = get_class_vars(ChildClass);
 $bproperties = get_class_vars(ParentClass);

Ve şimdi $ bproperties görünmüyor tüm $ özelliklerini üzerinde yineleme.

Get_class_vars kılavuz sayfası kullanıcı yorum bölümünde (çok iyi), bu yapmanın bir örnek içerir.

http://us.php.net/manual/en/function.get-class-vars.php