一、概述
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