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

99

可能是重复问题:
PHP ToString() 等价物

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

我正在处理 Web 服务 API。我想使用一个 API 的输出作为另一个 API 的输入。当我尝试这样做时,我得到了以下错误:Catchable fatal error: Object of class std could not be converted to string in C:\ ...

这是第一个 API 的输出:stdClass Object ( [document_number] => 10ba60 ),现在我只想使用那个数字作为第二个 API 的输入。

print_r 和 _string() 都不能解决我的问题。


3
你的意思是将其转换为字符串,就像在C语言中一样吗?还是查看数据所包含的直接可视化表示? - Cam
1
实际上,我正在处理网络服务API。我想将一个API的输出作为另一个API的输入使用。当我尝试这样做时,出现了以下错误:可捕获的致命错误:无法将std类的对象转换为字符串,位于C:.... - JJ.
我认为您需要给我们更多的细节。错误显示另一个API将第一个API的返回值用作字符串。我认为这完全取决于第一个API返回什么信息以及第二个API需要什么信息。 - Tomasz Struczyński
这是第一个API的输出:stdClass Object ( [document_number] => 10ba60 ) 现在我只想使用那个数字作为第二个API的输入。 - JJ.
JJ,我把你的评论添加到了问题中,放在了它们应该在的地方。 - user187291
显示剩余2条评论
5个回答

96
你可以通过在类中实现__toString()方法来定制对象的字符串表示形式,这样当你的对象被显式地类型转换为字符串(使用显式类型转换:$str = (string) $myObject;或自动转换 echo $myObject)时,你可以控制包含什么和字符串格式。
如果只想显示对象数据,则上面的方法可行。如果想将对象存储在会话或数据库中,则需要序列化它,这样PHP就知道如何重构你的实例。
下面是一些演示差异的代码:
class MyObject {

  protected $name = 'JJ';

  public function __toString() {
    return "My name is: {$this->name}\n";
  }

}

$obj = new MyObject;

echo $obj;
echo serialize($obj);

输出:

我的名字是: JJ

O:8:"MyObject":1:{s:7:"*name";s:2:"JJ";}


1
这不是序列化。除了序列化部分之外,这是一个非常好的解释(特别是关于实现__toString()的部分)。 - Cam
你说得对,谢谢,我已经修改了我的回答。 - Greg K
3
这个回答之前有吗?!抱歉,我没看到。我删掉我的,点赞你的。 - Gordon
__toString()和{$this->name}。太好了,正是我需要的。 - Kaydell

39
使用强制类型转换运算符 (string)$yourObject;

28
仅当对象可以被转换为字符串时才有效,例如实现__toString()。但在这种情况下它没有实现,显然这并不起作用。 - Tomasz Struczyński
这对于将对象值转换为字符串最为有效,例如(string)$object->value。当我们需要返回混合类型时非常有用。 - Eryk Wróbel

17
您可以使用 print_r 函数,具体请查看 文档

9

2
如果对象具有复杂的数据类型或资源,您应该使用魔术函数(magic functions)来处理它,例如__wakeup或__sleep函数用于序列化或反序列化资源或复杂的数据类型。请参考http://php.net/manual/en/language.oop5.magic.php。 - markcial
1
根据php.net的说明,使用serialize()时,会自动在适当的时间调用__wakeup/__sleep函数,因此您只需要担心实际实现这些函数本身。不过我猜测,这可能超出了OP的要求! - Cam

6
在您的情况下,您应该简单地使用。
$firstapiOutput->document_number

作为第二个 API 的输入。

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