У меня есть POPO (обычный старый объект PHP):
namespace App\Objects;
class POPO {
private $foo;
private $bar;
// getters and setters //
}
В другом месте у меня есть класс (Details — то, что делает класс, неважно), который должен знать имена свойств POPO. POPO не передается в этот класс, и при этом этот класс не создает экземпляр POPO и не заботится о значениях его свойств.
class POPODetails {
private $POPOclassName = "App\Object\POPO"; //determined programatically elsewhere.
public getProperties(): array {
return get_class_vars($this->POPOClassName); //this will only return public properties.
}
}
Использовать get_object_vars
Мне нужно было бы передать экземпляр объекта, который мне не нужен в противном случае, и все равно получил бы только открытые свойства. Я мог бы использовать ReflectionClass::getProperties()
, но также необходимо передать экземпляр объекта.
Итак, есть ли способ получить список классов, используя только Полное имя класса?
Вы все еще можете использовать ReflectionClass
php.net сообщает нам следующее об аргументе конструктора:
Либо строка, содержащая имя класса для отражения, либо объект.
так
<?php
class SomeClass
{
private $member;
private $othermember;
}
$cls = new ReflectionClass( SomeClass::class );
print_r( $cls->getProperties() );
напечатает:
Array
(
[0] => ReflectionProperty Object
(
[name] => member
[class] => SomeClass
)
[1] => ReflectionProperty Object
(
[name] => othermember
[class] => SomeClass
)
)
Других решений пока нет …