2014-01-23 2 views
3

Я хочу преобразовать объект в массив в PHP, но только его общие поля. Я уже нашел ответы на вопрос о том, каковы объекты объекта для массива в PHP, но все они преобразуют все поля (также частные). Мне нужны только публичные поля - как я могу это достичь?Преобразование объекта в массив PHP - только публичные поля

ответ

6

С помощью get_object_vars()

Пример:

$object_to_arr = get_object_vars($obj); 

get_object_vars() будет возвращать только доступные и не-статические свойства объекта.

Edit:

Если вы работаете в этом непосредственно на $this тогда он будет возвращать private свойства. Это связано с тем, что для самого класса доступны даже свойства private.

Чтобы обойти эту проблему, сделать что-то вроде:

$i = $this; 
$publics_only = function() use ($i) { 
    return get_object_vars($i); 
}; 
return $publics_only(); 
+0

Спасибо, я пропустил этот. –

+0

Я бы добавил serialize, если OP пытается сохранить такие свойства где-то http://www.php.net/manual/en/function.serialize.php – ILikeTacos

+0

@AlanChavez это то же самое с любым массивом. Это зависит от OP, чтобы обрабатывать массив необходимым образом. – Ryan

0

Для свойств, которые находятся вне сферы вызывающего использовать Reflection API для проверки видимости: http://php.net/manual/en/class.reflectionfunction.php, а затем преобразовать объект в массив с помощью жонглирования http://www.php.net/manual/en/language.types.type-juggling.php#language.types.typecasting

$arry = (array) $obj;

+2

Reflection API довольно неудобно использовать, и в основном полезно получить свойства, которые * вне * объема вызывающего, IMHO. Поскольку здесь цель состоит в том, чтобы получить видимые свойства, Reflection кажется немного излишним. –

+0

@kuroi neko Спасибо, что указали это, ответ обновился. –

Смежные вопросы