PHP: получить список приватных полей класса (не экземпляра!)

Как я могу перебрать закрытые поля класса, не имея его экземпляра, а просто имя класса?
get_object_vars требует существующего экземпляра.

0

Решение

С помощью: ReflectionClass

Вы можете просто сделать:

class Foo
{
public    $public    = 1;
protected $protected = 2;
private   $private   = 3;
}

$refClass = new \ReflectionClass('Foo');
foreach ($refClass->getProperties() as $refProperty) {
if ($refProperty->isPrivate()) {
echo $refProperty->getName(), "\n";
}
}

или скрыть реализацию, используя служебную функцию / метод:

/**
* @param string $class
* @return \ReflectionProperty[]
*/
function getPrivateProperties($class)
{
$result = [];

$refClass = new \ReflectionClass($class);
foreach ($refClass->getProperties() as $refProperty) {
if ($refProperty->isPrivate()) {
$result[] = $refProperty;
}
}

return $result;
}

print_r(getPrivateProperties('Foo'));

// Array
// (
//     [0] => ReflectionProperty Object
//         (
//             [name] => private
//             [class] => Foo
//         )
//
// )
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]