如何将PHP对象转换为字符串?

18

可能是重复问题:
PHP ToString() 等效方法


我遇到了这个错误:

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

我的问题是,如何在 PHP 中将对象转换为字符串?但我不想使用序列化。

顺便提一下:我使用的代码在 PHP 4 中可以工作,但在 PHP 5 中不行。

谢谢!

编辑:我自己解决了。虽然有点麻烦,但我做到了。还是谢谢大家 :-)


1
这将在什么上下文和目的中使用? - deceze
它用于WordPress。我有一个对象数组。我试图将对象的“slug”属性存储到字符串中,但是我得到了那个错误。 - Rohan
序列化就是转换成字符串,不是吗? - Álvaro González
7个回答

33

为什么需要这个字符串?如果只是为了调试而需要可视化它,您可以使用 var_dump(), print_r(), 或者 $s = print_r($var, 1); 将其转换成字符串进行更深入的主题化。如果需要将对象作为文本发送到其他地方(数据库、Javascript代码),则可以根据您的具体情况选择序列化、json_encode、XML转换等方法。


只是提供信息,我正在使用这个PHP代码片段来创建一个字符串,从JSON对象到我的HTML中的数据属性。然后,我的JavaScript将使用属性值按需过滤数据。这非常实用! - mdurchholz
不回答问题 - TV-C-1-5

5

你想将一个PHP对象转换为字符串吗?

如果既不是 var_dump,也不是 print_rvar_exportserializejson_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 {
    private pvt,
    protected prot,
    public pub: public
}

2
你需要的是在你的类中添加魔术方法__toString,这样你就可以打印出你想要的内容。
编辑:抱歉,刚看到“PHP 4,但不适用于PHP 5”。

一旦添加了它,如何从对象中调用它?直接调用吗? - Jonathan
只需将对象实例回显,如 echo new Image($params); - magicbyt3

1

2
你不能在 StdClass 上实现 __toString。 - K. Norbert

0

我怀疑这不是一个对象无法转换为字符串的问题。

更像是你假设一个变量包含一个字符串(或者可以表示为字符串的东西),但它实际上包含一个对象,而你正在尝试将其输出。


-1
从你得到的错误来看,我猜测你把一个对象作为参数传递给了期望字符串类型的函数。问题是,为什么你这样做以及你希望那个函数针对这个对象进行什么操作。在将其传递给函数之前,请提取出一个合理的字符串值。

-1

不要尝试将此对象转换为字符串,这样做不起作用。只需从该对象中获取精确值。

例如,如果您得到成本输出,则此成本输出是对象。因此,请按如下方式获取该值的精确值

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接