Я должен получить свойства из нескольких классов, хранящихся в одном каталоге.
У меня нет проблем со сбором охраняемой и публичной собственности.
Я только за публикой, так что до сих пор все хорошо.
Что я делаю:
$ foo = new Foo (); $ отражение = новый ReflectionClass ($ foo); $ props = $ refle-> getProperties (ReflectionProperty :: IS_PUBLIC | ReflectionProperty :: IS_PROTECTED); foreach ($ props as $ prop) { выведите $ prop-> getName (). "\ П"; }
Однако некоторые классы имеют защищенные методы, например :
класс Foo { public $ foo = 1; защищенный $ бар = 2; частный $ baz = 3; защищенная функция __construct () { } }
Как только я попадаю в такой класс, я получаю фатальную ошибку, которая останавливает мои усилия:
Неустранимая ошибка: вызов защищенной Foo :: __ construct () из контекста 'View' в [путь / идет / здесь]
Как лучше обойти это? (если есть)
+ Изменить
$foo = new Foo();
$reflect = new ReflectionClass($foo);
в
$reflect = new ReflectionClass('Foo');
Если вы действительно хотите создать новый экземпляр, посмотрите на newInstanceWithoutConstructor
функция
Если вы используете protected
или же private
тогда ваш конструктор не будет доступен извне класса.
призвание $foo = new Foo();
выдаст ошибку.
$reflect = new ReflectionClass('Foo');
echo $reflect->getName();// output Foo