get_object_vars() 是 PHP 內建的反射工具,能將物件的**可見非靜態屬性**提取為關聯陣列。本文詳細說明其語法、行為邊界、常見陷阱與實戰用法。
array get_object_vars ( object $object )
<?php
class Person {
public $name = "王美人";
public $age = 25;
public $birth; // 未初始化
protected $secret = "隱私";
private $id = 1001;
static public $count = 0;
}
$p = new Person();
print_r(get_object_vars($p));
/* 輸出:
Array (
[name] => 王美人
[age] => 25
[birth] =>
)
*/
?>
<?php
class Demo {
public $pub = 1;
protected $pro = 2;
private $pri = 3;
}
$obj = new Demo();
// 類外部調用:僅 public
var_dump(get_object_vars($obj));
// ['pub' => 1]
// 類內部調用(如在方法中):public + protected + private
class Demo {
// ...
public function dump() {
var_dump(get_object_vars($this));
// ['pub'=>1, 'pro'=>2, 'pri'=>3]
}
}
$obj->dump();
?>
array_map 處理巢狀物件。(array)$obj 強制轉換:後者包含所有屬性(含私有、靜態),鍵名會有特殊前綴(\0*\0, \0ClassName\0),需謹慎選擇。get_object_vars 只看實例屬性。TypeError (PHP 8+) 或警告 (舊版)。