探究get_object_vars

一、概述

get_object_vars是PHP内置函数,可以获取对象的所有属性,返回一个由属性名和属性值组成的关联数组。


class Foo {
    private $privateProperty = 'private';
    protected $protectedProperty = 'protected';
    public $publicProperty = 'public';
}

$foo = new Foo();
$vars = get_object_vars($foo);

print_r($vars);

输出结果为:


Array
(
    [protectedProperty] => protected
    [publicProperty] => public
)

可以看到,私有属性$privateProperty并未被返回。

二、只返回某些属性

如果只需要获取对象的某些属性,可以结合array_intersect_key函数使用,快速筛选。示例代码如下:


class Bar {
    public $foo = 'foo';
    public $bar = 'bar';
    public $baz = 'baz';
}

$bar = new Bar();
$vars = get_object_vars($bar);
$vars = array_intersect_key($vars, array_flip(['foo', 'baz']));

print_r($vars);

输出结果为:


Array
(
    [foo] => foo
    [baz] => baz
)

三、数组遍历

get_object_vars返回的是一个关联数组,可以使用foreach语句进行遍历。示例代码如下:


class Baz {
    public $foo = 'foo';
    public $bar = 'bar';
    public $baz = 'baz';
}

$baz = new Baz();
$vars = get_object_vars($baz);

foreach ($vars as $key => $value) {
    echo "$key: $value\n";
}

输出结果为:


foo: foo
bar: bar
baz: baz

四、获取静态属性

虽然get_object_vars的名字中含有”object”,但它也可以用来获取类的静态属性。示例代码如下:


class Quux {
    public static $foo = 'foo';
    public static $bar = 'bar';
    public static $baz = 'baz';
}

$vars = get_object_vars('Quux');

print_r($vars);

输出结果为:


Array
(
    [foo] => foo
    [bar] => bar
    [baz] => baz
)

五、获取对象方法

get_object_vars不能获取对象的方法,但是可以借助ReflectionClass类获取。示例代码如下:


class Quux {
    public function foo() {
        return 'foo';
    }
    public function bar() {
        return 'bar';
    }
    public function baz() {
        return 'baz';
    }
}

$quux = new Quux();
$methods = [];

$reflection = new ReflectionClass($quux);
foreach($reflection->getMethods() as $method) {
    if ($method->class == get_class($quux)) {
        $methods[] = $method->name;
    }
}

print_r($methods);

输出结果为:


Array
(
    [0] => foo
    [1] => bar
    [2] => baz
)

六、总结

get_object_vars是一个非常有用的函数,通过它我们可以快速获取对象的属性,并对属性进行筛选、遍历等操作。同时,我们还可以借助相关的技术手段,获取类的静态属性和对象的方法。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/312708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-06 09:47
下一篇 2025-01-06 09:47

发表回复

登录后才能评论