淘先锋技术网

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