【问题标题】:How to convert a PHP object to a string? [duplicate]如何将 PHP 对象转换为字符串? [复制]
【发布时间】:2011-02-02 00:37:00
【问题描述】:

可能重复:
PHP ToString() equivalent

我收到此错误:

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

所以,我的问题是,如何在 PHP 中将对象转换为字符串?不过我不想序列化它。

请注意:我使用的代码适用于 PHP 4,但不适用于 PHP 5

谢谢!

编辑:我自己解决了。这很痛苦,但我做到了。无论如何,谢谢大家:-)

【问题讨论】:

  • 使用它的上下文和目的是什么?
  • 它用于wordpress。我有一个对象数组。我正在尝试将对象的 'slug' 属性存储在字符串中,但我得到了那个错误。
  • 序列化转换成字符串,不是吗?

标签: php


【解决方案1】:

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

【讨论】:

  • 仅供参考,我正在使用这个 PHP sn-p 从我的 HTML 中的数据属性的 JSON 对象创建一个字符串。然后,我的 JavaScript 将根据需要使用属性值来过滤数据。这派上用场了!
【解决方案2】:

您想将 PHP 对象转换为字符串吗?

如果var_dumpprint_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 {
    protected pvt,
    protected prot,
    public pub: public
}

【讨论】:

    【解决方案3】:

    您需要将魔术方法__toString 添加到您的类中,以便打印您想要的内容。

    编辑:抱歉,刚刚看到“PHP 4,但不是 PHP 5”。

    【讨论】:

    • 添加后,如何从对象调用它?直接?
    • 只是回显对象实例,例如 echo new Image($params);
    【解决方案4】:

    我怀疑这不是对象不可转换为字符串的问题。

    这更像是您假设一个变量包含一个字符串(或可以表示为字符串的东西),但它包含一个对象,而您试图将其回显。

    【讨论】:

      【解决方案5】:

      你可以使用php魔术方法__toString

      【讨论】:

      • 你不能在 StdClass 上实现 __toString。
      【解决方案6】:

      您不要尝试将此对象转换为字符串,它不会起作用。只需从该对象中获取确切的值。

      例如,如果您将输出作为成本。此成本输出是对象。所以从这里获取确切的值如下

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

      【讨论】:

        【解决方案7】:

        从您得到的错误中,我假设您将该对象用作需要字符串的函数的参数。问题是,您为什么这样做,以及您期望该功能对对象产生什么影响。然后在将其传递给函数之前,提取一个合理的字符串值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-28
          • 1970-01-01
          • 2014-07-19
          相关资源
          最近更新 更多