Как вернуть уровень модификатора доступа свойства объекта в PHP?

скажи, у меня есть этот класс:

class Foo {
var $pu = 0;
private $pr = 1;
}

Мне нужно найти способ проверить уровень модификатора доступа одного свойства, например:

class Foo {
var $pu = 0;
private $pr = 1;

function return_all_public () {
$publics = [];
for (get_object_vars($this) as $key => $value) {
// if $this->{$key} is public then array_push($publics, $key);
}
return $publics;
}
}

Это всего лишь пример, функция не то, что я пытаюсь достичь, просто я хочу знать, как проверить уровень модификатора доступа одного свойства (публичное, защищенное или частное?)

0

Решение

использование ReflectionObject:

foreach ((new ReflectionObject($this))->getProperties(ReflectionProperty::IS_PUBLIC) as $property) {
$publics[] = $property->getName();
}

Или даже:

$publics = array_map(function (ReflectionProperty $property) {
return $property->getName();
}, (new ReflectionObject($this))->getProperties(ReflectionProperty::IS_PUBLIC));

Рекомендации:
http://php.net/manual/en/class.reflectionobject.php
http://php.net/manual/en/reflectionclass.getproperties.php
http://php.net/manual/en/class.reflectionproperty.php

1

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

РЕДАКТИРОВАТЬ Чтобы уточнить — не используйте это, это явно ошибка, которая, кажется, была исправлена ​​в php версии 7. http://codepad.viper-7.com/lyULdW (изменить версию на <= 5,6, чтобы увидеть, как это работает)

Ответ @deceze является наиболее надежным, но, как вы указали, предпочтение вызывается функциями без создания нового объекта:

class Foo
{
var $pu = 0;
private $pr = 1;

function return_all_public () {
return call_user_func('get_object_vars', $this);
}
}

Неясно, является ли эта проблема с областью функциональностью или ошибкой!

0