在PHP中,我們經常需要獲取一個對象的屬性列表。為了方便,PHP提供了get_object_vars()函數。該函數可以返回一個數組,其中包含對象的所有屬性,以及它們的值。下面來看一個例子:
class Book { public $title; public $author; public $price; public function __construct($title, $author, $price) { $this->title = $title; $this->author = $author; $this->price = $price; } public function display() { echo $this->title . " by " . $this->author . " costs $" . $this->price; } } $book = new Book("Harry Potter", "J.K. Rowling", 10.99); $vars = get_object_vars($book); print_r($vars);當我們運行以上代碼時,我們會得到以下輸出:
Array ( [title] =>Harry Potter [author] =>J.K. Rowling [price] =>10.99 )正如我們預期的那樣,這個數組包含了我們在Book類中定義的所有屬性。接下來我們來更深入地了解get_object_vars()函數。 get_object_vars()函數只接受一個參數,即要獲取屬性列表的對象。給定一個對象,該函數會返回一個數組,其中包含所有公共屬性的名稱和值。私有屬性和受保護的屬性不能從類的外部訪問,因此也不能從get_object_vars()函數中獲取。下面是一個例子:
class Person { public $name; protected $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } } $person = new Person("Bob", 30); $vars = get_object_vars($person); print_r($vars);在以上代碼中,我們嘗試獲取Person對象的屬性列表,但我們只得到了一個數組,其中只包含了一個公共屬性$name。這是因為$age屬性是受保護的,get_object_vars()函數不能獲取它的值。 如果你嘗試獲取一個對象的類中未定義的屬性,get_object_vars()函數會返回一個空數組。下面是一個例子:
class Car { public $make; public $model; } $car = new Car(); $car->year = 2020; $vars = get_object_vars($car); print_r($vars);因為我們在Car類中沒有定義$year屬性,get_object_vars()函數只返回了Car對象的已定義屬性$make和$model的值。 get_object_vars()函數不能用于獲取類的靜態屬性。它們只能通過類名稱直接訪問,如下例所示:
class MyClass { public static $variable = "Hello, world!"; } $vars = get_object_vars('MyClass'); // Returns an empty array我們不能通過get_object_vars()函數獲取MyClass類的靜態屬性$variable的值。因為它不是一個對象的屬性,而是一個類的屬性。 總之,在PHP中,get_object_vars()函數是獲取對象屬性列表的有用函數。雖然它不能獲取類的受保護或私有屬性,但對于公共屬性而言,它確實很方便。
下一篇php ini 在哪