PHP: получить список всех свойств класса (общедоступных и закрытых) без создания экземпляра класса - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть POPO (обычный старый объект PHP):

namespace App\Objects;

class POPO  {
    private $foo;
    private $bar;

    // getters and setters //
}

В другом месте у меня есть класс (Подробности - что класс делает неважно), которому нужно знать имена свойств 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(), но также должен был бы передать экземпляр объекта.

Итак, есть ли способ получить список переменных класса, используя только полное имя класса?

1 Ответ

0 голосов
/ 20 сентября 2018

Вы все еще можете использовать 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
        )
)
...