как заставить работать __toString()

exxbrain

Новичок
как заставить работать __toString()

Не могли бы ли вы подсказать, как заставить работать метод __toString()

PHP:
class Text {
...
public function __toString()
{
	return file_get_contents($this->fileName);
}
}
Дело в том, что экземпляр класса Text создает посредник, который в дальнейшем отдает его на отображение вместе с прочей фигней. Т.е. у посредника есть метод

PHP:
class Posrednik
{
...
public function getText()
{
        return new Text($this->id);
}
}
если я при отображении делаю

PHP:
echo $posrednik->getText()
, то происходит Object of class Text to string conversion in
То ли я чего не допираю, то ли нелогично как-то получается. Помогите пожалуйста разобраться.

P.S. Если сразу делать

PHP:
public function getText()
{
        echo new Text($this->id);
}
то все прекрасно отображается.
 

crezd

Новичок
echo $posrednik->getText()

пытаеться вызвать __toString() класса Posrednik
 

exxbrain

Новичок
спасибо
но что-то здесь все равно не то

Попробовал сделать (конечно только ради интереса)

PHP:
public function __toString()
{
     return new Text($this->id);
}
в посреднике...
та же байда.

Вот, думаю, может поздно уже :)
 

hermit_refined

Отшельник
Object of class Text to string conversion in
по крайней мере на 5.2.0 - не воспроизводится.

-~{}~ 05.03.07 01:42:

Автор оригинала: crezd
пытаеться вызвать __toString() класса Posrednik
ась?
вообще, у вас очень малый процент попадания.
задумайтесь над этим.
 

hermit_refined

Отшельник
exxbrain
P.S. I think, проблема исключительно в вашей невнимательности.
мне лень на этот счет смотреть исходники, но на всякий случай прогнал на 5.0.5 - тоже не воспроизводится.
 

exxbrain

Новичок
hermit_refined
Я в этом сомневаюсь, т.к. цепочка довольно проста.
Последний кусок кода который я выложил, говорит в пользу этого, т.к. цепочка сокращается до 2-х звеньев.
Дальше я не вывожу, а передаю этот объект.
Что изменилось в нем?

P.S. Вобщем это не такой уж животрепещущий вопрос - способов можно накопать достаточно, как обойти. Т.е. изучения кода с чьей-либо стороны не требуется.
Просто мне показалось это довольно странным.
 

hermit_refined

Отшельник
ох...
ещё раз - ваш пример
PHP:
class Text
{
    public function __toString()
    {
        return 'Test';
    }
}

class Posrednik
{
    public function getText()
    {

        return new Text();
    }
}

$p = new Posrednik();

echo $p->getText();
работает as expected на php 5.0.5 и 5.2.0
что-то ещё хотите?..
 

exxbrain

Новичок
ох.. спасибо. сорри

1. Не хочу показаться психом, но все, оказывается, работает и в реальном коде. По-моему ничего не делал.
2. Не хотел бы показаться пудрящим мозги - но опять не работает! Наверно сервер переустановить надо.

-~{}~ 05.03.07 02:48:

Нет - ерунда какая-то.
В реальном коде все по-сложнее конечно.
Может из-за этого.

Может быть баг какой-то!

Но все правильно - проверяю класс - get_class() - Text.
Тут вроде по определению такой ошибки быть не может - Object of class !Text! to string conversion in. Т.к. присутствует __toString().

Этот код, что вы написали, и у меня работает.
И с file_get_contents тоже - в таком варианте.

Наверное пора идти спать. А то скоро чертики мерещится будут.
 
Сверху