在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()函数是获取对象属性列表的有用函数。虽然它不能获取类的受保护或私有属性,但对于公共属性而言,它确实很方便。