Как мне получить значение из object(stdClass)?

#php #parsing

#php #синтаксический анализ

Вопрос:

Используя PHP, я должен проанализировать строку, приходящую в мой код в формате, подобном этому:

 object(stdClass)(4) { 
    ["Title"]=> string(5) "Fruit" 
    ["Color"]=> string(6) "yellow" 
    ["Name"]=> string(6) "banana" 
    ["id"]=> int(3) 
}
 

Я уверен, что есть простое решение, но, похоже, я не могу его найти… как получить цвет и имя?

Большое спасибо.

Комментарии:

1. Вы пробовали $obj->Title $obj-> Color

2. Было бы немного более проницательно, если бы вы опубликовали фрагмент кода, который вы используете для генерации этого вывода.

3. Подождите, что? Вам нужно » разобрать » строку? Или это фактическая объектная переменная?

Ответ №1:

Вы можете сделать: $obj->Title и так далее.

Или вы можете превратить его в массив:

 $array = get_object_vars($obj);
 

Комментарии:

1. Спасибо! $obj-> Title делает это за меня.

2. Объекты stdClass могут иметь переменные, недоступные для обозначения массива. Пример использования фасада БД laravel (с использованием psysh): >>> $res = DB::select("show create table test")[0] >>> get_object_vars($res) [ "Table" => "test", "Create Table" => """ CREATE TABLE test (n ... ] переменная «Создать таблицу» доступна только с помощью get_object_vars($res)

Ответ №2:

Вы создаете объекты stdClass и методы доступа из них следующим образом:

 $obj = new StdClass;

$obj->foo = "bar";
echo $obj->foo;
 

Я рекомендую подклассы stdClass или создать свой собственный универсальный класс, чтобы вы могли предоставлять свои собственные методы.

Превращение объекта stdClass в массив:

Вы можете сделать это с помощью следующего кода:

 $array = get_object_vars($obj);
 

Взгляните на:
http://php.net/manual/en/language.oop5.magic.php
http://krisjordan.com/dynamic-properties-in-php-with-stdclass

Комментарии:

1. Спасибо за вашу помощь! Мне просто нужен $obj-> Title, но полезно знать другую информацию на будущее.

Ответ №3:

Пример объекта stdClass:

 $obj = new stdClass();

$obj->foo = "bar";
 

По свойству (как упоминали другие)

 echo $obj->foo; // -> "bar"
 

По значению переменной:

 $my_foo = 'foo';

echo $obj->{$my_foo}; // -> "bar"
 

Ответ №4:

Я решил эту проблему путем преобразования stdClass object в array using json_encode и json_decode вот так:

 $object_encoded = json_encode( $obj );
$object_decoded = json_decode( $object_encoded, true );

echo $object_decoded['Color'];
 

Примечание: передача true параметра в json_decode возвращает ассоциативный массив.

Ответ №5:

extract(get_object_vars($obj))

вернет $Title, $Color и т. Д