Вызов метода __toString c параметрами

флоппик

promotor fidei
Команда форума
Партнер клуба
Вызов метода __toString c параметрами

Есть ли возможность вызвать метод __toString с передачей параметра? Естественно, речь идет о его magic functionality а не прямом обращении к методу.
 

Crys

Двинутый новичок
Есть ли возможность вызвать метод __toString с передачей параметра? Естественно, речь идет о его magic functionality а не прямом обращении к методу.
Нет
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Угу. Самое смешное, что метод принимает аргументы, и работает с ними... вот только передать их можно только напрямую. Синтаксис, блин. Пришлось просто сделать свойство у объекта, и опираться на него. Всем спасибо.
 

kode

never knows best
я думаю это будет идеалогически неверно. __toString() - это проекция обьекта в строку, например для сравнения с себе подобными. Если тебе действительно хочется, предлагаю компромисный вариант

public function toString($param=null){

}

public function __toString(){
return $this->toString();
}
 

флоппик

promotor fidei
Команда форума
Партнер клуба
__toString() - это проекция обьекта в строку, например для сравнения с себе подобными.
Неа. Он вызывается ТОЛЬКО в контексте вывода на экран. Раньше вообще только с echo вызывался. И именно вы этом проблема.
предлагаю компромисный вариант
Я понимаю, что такое можно сделать. Хотелось именно перекрыть magic functionality. Это сэкономило бы кучу работы, но увы. Уже согласился на приведенный «копромиссный» вариант. :(

-~{}~ 31.08.08 13:01:

It is worth noting that before PHP 5.2.0 the __toString method was only called when it was directly combined with echo() or print(). Since PHP 5.2.0, it is called in any string context (e.g. in printf() with %s modifier) but not in other types contexts (e.g. with %d modifier).
Ага, и скоро появятся методы __toInt(), __toXML(), __toDatbaseQuery().... шЮтка, да )
 

zerkms

TDD infected
Команда форума
флоппик
если тебе не нравится текущий синтаксис - приведи вариант синтаксиса, в котором можно было бы параметризировать этот магический метод

исходный код:

PHP:
echo 'ololo' . $object . 'ololo';
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Меня бы устроил вариант
PHP:
echo 'ololo' . $object($param) . 'ololo';
например, после поиска соответствующей переменной с именем функции, я был бы не прочь, при ее отсутствии, что бы вызвался __toString($param) у обьекта $object.

Я не говорю, что не вижу альтернатив для вызова, я сказал что _мне_ это было бы удобно.
 

Andreika

"PHP for nubies" reader
флоппик
хм.. а откуда появится имя функции для поиска?:)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
а откуда появится имя функции для поиска?
в моем случае ее и нет. А есть поведение парсера как раз в приведенном случае, он будет искать переменную $object содержащую имя функции, что бы вызвать ее с указанными параметрами.
 

dimagolov

Новичок
флоппик, ну пхп то поймет такой синтакс как переменную ф-ю. как тут избежать неоднозначности?
 

zerkms

TDD infected
Команда форума
dimagolov
вероятно - контекст должен это определять. если объект - то toString(), иначе - функция...
но то, что возникает неразбериха - без сомнений
 

dimagolov

Новичок
да ну его. с учетом неявной типизации а пхп анализировать человеку такой код это застрелиться. потому что если это параметр, который пришел через 10 вызовов и без явного указания типа, то надо сидеть и раскручивать всю цепочку вызовов чтобы понять, что же там такое, строка или объект и главное почему же именно так, а не иначе
 

флоппик

promotor fidei
Команда форума
Партнер клуба
dimagolov, на самом деле, это как у Михалкова:
«Дело не в фамилии, а в человеке» — кривые руки сумеют запутать любой контекст использования. Нельзя — так нельзя.

-~{}~ 31.08.08 20:25:

Я уже все сделал давно, да :)
 

dimagolov

Новичок
Ну чего так уж сразу нельзя. А вдруг Тони идея понравиться и станет можно? :D
 
Сверху