2012-01-03 3 views
0

Я следующее как строка:Как я могу создать объект PHP StdClass с выхода объекта PHP StdClass

stdClass Object 
(

    [createResult] => stdClass Object 

     (
      [ReturnCode] => 1 
     ) 

) 

Как я могу принять вышеуказанную строку и создать новый объект StdClass? Я хотел бы получить значение, как это:

$rc = $obj->createResults->ReturnCode; 
+3

Вы хотите преобразовать 'print_r' выход в то, что это было? Зачем? Вероятно, вы должны использовать сериализацию или что-то еще ... – ceejayoz

ответ

1

Если вы можете изменить способ выводит в нечто вроде var_export, вы можете потом использовать эту строку с eval, чтобы получить его обратно.

http://www.php.net/manual/en/function.var-export.php

+0

Это не сработает. Дамп 'var_export' вызывает вызовы статического метода' __set_state', которого 'stdClass' не имеет. – Charles

+0

@Charles, действительно, это не сработает, их много обходных решений, но все они требуют некоторого обмана, вы можете обернуть весь объект в другой, получить доступ ко всем свойствам и методам ... но это не наш случай, вы можете использовать парсер или что-то в этом роде. – khael

1

Если вы не можете изменить его (по любой причине) и должны использовать выход print_r, то вы можете попробовать этот рецепт и посмотреть, если он работает для вас. http://www.php.net/manual/en/function.print-r.php#93529

Однако, если это вообще возможно, вы должны хранить данные в более переносимом формате. Вы можете использовать php's serialize =>unserialize, или json_encode =>json_decode, для начала.

0

Вы также можете сделать это так:

<?php 
$s = "stdClass Object 
(

    [createResult] => stdClass Object 

     (
      [ReturnCode] => 1 
) 

)"; 
$s = preg_match("/\s\[ReturnCode\] => \S+\s/", $s, $m); 
echo preg_replace("/\s\[ReturnCode\] => (\S+)\s/", "$1", $m[0]); 
Смежные вопросы