parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Misha v.3 01.07.2010 03:26 / 01.07.2010 03:47

добавление перехвата .as_string/.get_string (как сейчас сделано для .get_hash, as_expression и т.д.) не решит эту задачу.

$var[$oObj] (а также и $oObj в чистом поле) -- это не работа с объектом в строковом контексте (т.е. это не попытка неявного преобразования его в строку). это -- копирование указателя на объект. не нужно говорить, что это поведение менять нельзя, т.к. тогда станет невозможно копировать ссылку на объект.

если реализовать предлагаемое, то обращение в строковом контексте можно получить например при передаче пользовательского объекта какому-либо системному методу, который принимает строковый параметр. внутри делается .get_string, и именно в этом случае произойдёт вызов пользовательского @GET с передачей значения string.

желающие могут попробовать реализовать это самостоятельно. делается тривиально путём копирования VObject::get_hash и заменой в нём всех "hash" на "string". но... надо быть аккуратным, т.к. это изменение не покрыто тестами.

кроме того, если данную фичу реализовать, это может привести к появлению сложноотлавливаемых ошибок.
Увидеть глазами внутренности просто написав $oObject — очень удобно.
это преподнесено так, будто оно заработает самостоятельно.
увы, всё равно придётся написать сериализатор для объектов каждого типа. это существенно большая работа, чем последующие написания ^oObj.debug_print[] вместо $oObj.

к тому же мне кажется, что для отладки неудобно у каждого класса создавать сериализаторы (который после отладки удалять?). вместо этого проще воспользоваться внешним методом dstop, немного доработав его чтобы он мог показывать пользовательские объекты (теперь это возможно, т.к. есть класс reflection).