探究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/zh-tw/n/312708.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-06 09:47
下一篇 2025-01-06 09:47

發表回復

登錄後才能評論