一、概述
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/zh-tw/n/312708.html