перебирать только существующие свойства объектов, а не их родительский класс? - PullRequest
3 голосов
/ 12 апреля 2010

У меня есть класс, который расширяет другой.

когда я повторяю текущий объект, я получаю все свойства, даже те из суперкласса.

Я хочу перебирать только текущий объект. как я могу это сделать?

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

Ответы [ 3 ]

1 голос
/ 12 апреля 2010

Вы также можете попробовать использовать PHP Reflection http://php.net/manual/en/book.reflection.php

Я думаю, что вы можете сделать, используя @Ivo Sabev ответ:

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

А теперь переберите все свойства $, которые не отображаются в $ bproperties.

1 голос
/ 12 апреля 2010

Очень интересный вопрос.

Я настоятельно рекомендую прочитать примеры здесь - http://dsl093 -056-122.blt1.dsl.speakeasy.net / edu / oreilly / Oreilly_Web_Programming_bookshelf / webprog / php / ch06_05.htm они будут дать вам лучшее представление о самоанализе. Справка об используемых методах находится здесь - http://www.php.net/manual/en/ref.classobj.php


Вот функция с контрольным примером. Он будет работать только в PHP 5+, так как использует Reflection, который до этого не был доступен. Вы можете прочитать больше о Reflection здесь - 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;
}
0 голосов
/ 12 апреля 2010

Страница справки get_class_vars содержит пример этого в разделе комментариев пользователей (очень вверху).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...