我有一个扩展另一个的课程。
当我迭代当前对象时,我获得所有属性,甚至是来自超类的属性。
我只想迭代当前对象。我怎么能这样做?
foreach($this as $key => $value) {
echo $key . ': ' . $value;
}
答案 0 :(得分:1)
非常有趣的问题。
我强烈建议你阅读这里的例子 - 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。您可以在此处阅读有关反思的更多信息 - 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;
}
答案 1 :(得分:1)
您也可以尝试使用PHP Reflection http://php.net/manual/en/book.reflection.php
我猜你可以用@Ivo Sabev回答:
$properties = get_class_vars(ChildClass);
$bproperties = get_class_vars(ParentClass);
现在遍历$ bproperties中没有出现的所有$属性。
答案 2 :(得分:0)
get_class_vars手册页包含在用户评论部分(最上面)中执行此操作的示例。