Я разработал этот быстрый тест. Похоже, что частные свойства родительского объекта скрыты, когда вы получаете свойства дочерних классов. Однако, если вы вызовете getParentClass()
, то getProperties()
у вас будет отсутствующий набор личных реквизитов.
<?php
class Ford {
private $model;
protected $foo;
public $bar;
}
class Car extends Ford {
private $year;
}
$class = new ReflectionClass('Car');
var_dump($class->getProperties()); // First chunk of output
var_dump($class->getParentClass()->getProperties()); // Second chunk
Вывод (обратите внимание, что личная опора Ford::model
отсутствует):
array(3) {
[0]=>
&object(ReflectionProperty)#2 (2) {
["name"]=>
string(4) "year"
["class"]=>
string(3) "Car"
}
[1]=>
&object(ReflectionProperty)#3 (2) {
["name"]=>
string(3) "foo"
["class"]=>
string(4) "Ford"
}
[2]=>
&object(ReflectionProperty)#4 (2) {
["name"]=>
string(3) "bar"
["class"]=>
string(4) "Ford"
}
}
Second Chunk (содержит все свойства класса Ford):
array(3) {
[0]=>
&object(ReflectionProperty)#3 (2) {
["name"]=>
string(5) "model"
["class"]=>
string(4) "Ford"
}
[1]=>
&object(ReflectionProperty)#2 (2) {
["name"]=>
string(3) "foo"
["class"]=>
string(4) "Ford"
}
[2]=>
&object(ReflectionProperty)#5 (2) {
["name"]=>
string(3) "bar"
["class"]=>
string(4) "Ford"
}
}