2010-08-31 1 views
-3

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

<?php 

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

?> 

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

<?php 

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

?> 

Это не work.How, чтобы сделать это, есть ли способ вместо __toString() или каким-либо образом с помощью __toString?

+14

Это называется '__toString()' по причине ... – fredley

+1

Почему с помощью __toString()? Не применим ли метод getBinaryRepresentation()? –

+1

Что вы пытаетесь достичь? Просьба уточнить «возвращаемое значение класса по умолчанию». Похоже, вы хотите что-то похожее на свойство по умолчанию COM/OLE/VisualBasic, http://msdn.microsoft.com/en-us/library/az06zx4y%28VS.90%29.aspx – VolkerK

ответ

11

Предлагаем Вам написать собственный метод __toResource() или аналогичный. Попытка сделать это с использованием __toString() была бы неправильной, так как вы не возвращали String - вы можете смутить будущих разработчиков или даже вас примерно через год или около того.

Редактировать

В ответ на ваш комментарий, как это?

// 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"; 
} 
+0

Итак, как это сделать? – sundowatch

+0

@sundowatch see my edit –

+4

Не префикс имени метода с '__'. Они зарезервированы и могут использоваться в будущем. – Artefacto

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"); 
    } 
} 
+0

Вы правы. Но я верну изображение ресурса, и я обработаю этот образ следующим образом: $ img = new my(); imagecopymergegray ($ dst, $ img, 0,0,0,0,0); imagejpeg ($ dst, "image2.jpg"); Я не могу этого сделать. – sundowatch

+0

Я не хочу размещать содержимое. Я хочу отобразить тип ресурса. – sundowatch

 Смежные вопросы

  • Нет связанных вопросов^_^