首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP get_object_vars() 函數完全指南

     編輯:PHP 相關知識

get_object_vars() 是 PHP 內建的反射工具,能將物件的**可見非靜態屬性**提取為關聯陣列。本文詳細說明其語法、行為邊界、常見陷阱與實戰用法。

函數原型與返回值

array get_object_vars ( object $object )
  • 返回:屬性名 => 值 的關聯陣列。
  • 僅包含**當前作用域可訪問的非靜態屬性**(public/protected/private 視調用位置而定)。
  • 不包含靜態屬性、常量、方法。

基礎範例

<?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 處理巢狀物件。
  • JSON 序列化前過濾:移除敏感字段(如密碼雜湊)。
  • 配合 (array)$obj 強制轉換:後者包含所有屬性(含私有、靜態),鍵名會有特殊前綴(\0*\0, \0ClassName\0),需謹慎選擇。

常見誤區

  1. ❌ 以為能獲取靜態屬性 → get_object_vars 只看實例屬性。
  2. ❌ 以為能獲取父類 private 屬性 → 子類作用域不可見,除非在父類方法中調用。
  3. ❌ 傳入非物件 → 拋出 TypeError (PHP 8+) 或警告 (舊版)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved