Как вернуть другой тип с помощью метода __toString ()? - PullRequest
0 голосов
/ 31 августа 2010

Мы используем __toString () для возврата значения класса по умолчанию, например:

<?php

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

?>

Возвращает только строковый тип.Но я хочу вернуть тип ресурса:

<?php

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

?>

Это не работает. Как это сделать? Есть ли какой-нибудь метод вместо __toString () или каким-либо образом с использованием __toString?

Ответы [ 2 ]

12 голосов
/ 31 августа 2010

Предложите написать свой собственный метод __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";
}
2 голосов
/ 31 августа 2010

Это невозможно.Как следует из названия, __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");
   }
}
...