首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎样才能在php中获得一个'last descendant‘对象的所有公共属性值?

我怎样才能在php中获得一个'last descendant‘对象的所有公共属性值?
EN

Stack Overflow用户
提问于 2013-07-13 00:13:47
回答 1查看 53关注 0票数 2

下面的代码使得这一点更容易解释:

代码语言:javascript
复制
<?php

class a
{
    public $dog = 'woof';
    public $cat = 'miaow';
    private $zebra = '??';
}                 

class b extends a
{
    protected $snake = 'hiss';
    public $owl = 'hoot';
    public $bird = 'tweet';
}

$test = new b();

print_r(get_object_vars($test));    

目前,它返回:

代码语言:javascript
复制
Array
(
    [owl] => hoot
    [bird] => tweet
    [dog] => woof
    [cat] => miaow
)

如何才能找到仅在类b中定义或设置的属性(例如,仅在owl和bird中定义或设置)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-13 00:19:07

使用ReflectionObject执行以下操作:

代码语言:javascript
复制
$test = new b();

$props = array();
$class = new ReflectionObject($test);
foreach($class->getProperties() as $p) {
    if($p->getDeclaringClass()->name === 'b') {
        $p->setAccessible(TRUE);
        $props[$p->name] = $p->getValue($test);
    }
}

print_r($props);

输出:

代码语言:javascript
复制
Array
(
    [snake] => hiss
    [owl] => hoot
    [bird] => tweet
)

getProperties()将返回该类的所有属性。之后,我将使用$p->getDeclaringClass()检查声明类是否为b

此外,还可以将其概括为一个函数:

代码语言:javascript
复制
function get_declared_object_vars($object) {
    $props = array();
    $class = new ReflectionObject($object);
    foreach($class->getProperties() as $p) {
        $p->setAccessible(TRUE);
        if($p->getDeclaringClass()->name === get_class($object)) {
            $props[$p->name] = $p->getValue($object);
        }   
    }   

    return $props;
}

print_r(get_declared_object_vars($test));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17619325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档