如何用__toString()方法返回不同的类型?

时间:2010-08-31 13:19:05

标签: php return tostring

我们使用__toString()来返回类的默认值:

<?php

class my
{
   public function __toString()
   {
      return "asdasd";
   }
}

?>

它只返回字符串类型。但我想返回资源类型:

<?php

class my
{
   public function __toString()
   {
      return imagecreatefromjpeg("image.jpg");
   }
}

?>

它不起作用。如何做?是否有任何方法而不是__toString()或任何方式使用__toString?

2 个答案:

答案 0 :(得分:12)

建议您编写自己的方法__toResource()或类似方法。尝试使用__toString()执行此操作是错误的,因为您没有返回字符串 - 您可能会混淆未来的开发人员甚至自己大约一年左右。

修改

回答你的评论,像这样?

// Use one _ as suggested by Artefacto
public function _toResource()
{
    // Return the resource object
    return imagecreatefromjpeg("image.jpg");
}

public function __toString()
{
   // Return the filename as a string
   return "image.jpg";
}

答案 1 :(得分:2)

这是不可能的。顾名思义,__toString应该返回一个字符串。

甚至不允许可转换为字符串的内容:

class my
{
   public function __toString()
   {
      return 6;
   }
}

//Catchable fatal error: Method my::__toString() must return a string value    
echo(new my());

如果您尝试将图像的内容恢复到例如echo(new my),你可以这样做:

class my
{
   public function __toString()
   {
      return (string) file_get_contents("myimage.jpeg");
   }
}