Opracowałem ten szybki test. Wygląda na to, że prywatne właściwości rodzica są ukrywane, gdy uzyskasz właściwości klas potomnych. Jeśli jednak wywołasz getParentClass()
, a następnie getProperties()
, otrzymasz brakujący zestaw prywatnych rekwizytów.
<?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
Output (zauważ prywatny prop Ford::model
brakuje):
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"
}
}
drugie Chunk (zawiera wszystkie właściwości klasy 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"
}
}
Gnarly! Dzięki! Zastanawiam się, czy możesz wtedy zrobić $ class-> getParentClass() -> getProperty ('model') -> setValue ($ car, 'F-150') – johnnietheblack