Как преобразовать объект в строку в PHP? [дубликат]

Возможные Дубликаты:
PHP ToString() эквивалент

Я получаю эту ошибку:

Catchable fatal error: Object of class stdClass could not be converted to string

Итак, мой вопрос: как преобразовать объект в строку в PHP? Я не хочу сериализовать его.

просто Примечание: код, который я использую, работает в PHP 4, но не в PHP 5

спасибо!

EDIT: я решил это сам. Это было больно, но я сделал это. Спасибо всем :-)

7 ответов


зачем вам нужна эта строка? Если вам просто нужно визуализировать его для отладки, вы можете использовать var_dump (), print_r () или $s = print_r($var, 1); чтобы действительно сделать это в строку для дальнейшей тематизации. Если вам нужно отправить объект в виде текста в другое место (база данных, код Javascript), у вас есть выбор сериализации, json_encode, преобразования XML и многое другое, в зависимости от вашей точной ситуации.


вы хотите преобразовать объект PHP в строку?

, если не вложенностями, print_r, var_export, сериализовать, json_encode, ни __toString это именно то, что вам нужно, возможно, это поможет вам удовлетворить ваши потребности.

для PHP 5.3 и выше

<?php
$v = (object) array('a' => 1, 'b' => 2, 'c' => 3);
$r = new ReflectionObject($v);

echo $r->getName() .' {' . implode(', ', array_map(
     function($p) use ($v) {
         $p->setAccessible(true);
         return $p->getName() .': '. $p->getValue($v);
     }, $r->getProperties())) .'}';

вывод:

stdClass {a: 1, b: 2, c: 3}

для более обычного подхода, совместимого с предыдущим PHP 5 вкусов попробовать

<?php
class ExampleClass {
    private $pvt = 'private';
    protected $prot = 'protected';
    public $pub = 'public';
}

$v = new ExampleClass();
$r = new ReflectionObject($v);

echo $r->getName() ." {\n";
foreach ($r->getProperties() as $p)
   if ($p->isPublic())
       echo "\tpublic ".$p->getName().': '.$p->getValue($v)."\n";
   else
       echo "\t".($p->isPrivate()?'private ':'protected ').$p->getName().",\n";
echo "}\n";

которая будет печатать:

ExampleClass {
    protected pvt,
    protected prot,
    public pub: public
}

что вам нужно, это добавить магический способ __toString в свой класс, чтобы вы могли печатать то, что хотите.

Edit: извините, просто увидел "PHP 4, но не в PHP 5".


Я подозреваю, что это не проблема с объектом не конвертируемых в строку.

Это больше похоже на то, что вы предполагаете, что переменная содержит строку (или что-то, что может быть представлено как строка), но она содержит объект, и вы пытаетесь повторить это.


вы можете использовать php magic method __toString


вы не пытаетесь преобразовать этот объект в строку, он не будет работать. Просто извлеките точное значение из этого объекта.

в качестве примера, если вы получили выход как стоимость.эта себестоимость является объектом. поэтому получите точное значение из этого следующим образом

  $var=cost->Postage_cost;
  $var1=cost->other_cost;

из полученной ошибки я предполагаю, что вы использовали объект в качестве параметра функции, которая ожидает строку. вопрос в том, почему вы это сделали и что вы ожидаете от этой функции с объектом. и затем, прежде чем передать его функции, извлеките разумное строковое значение.