nepster09: Потому что, как я написал, выражение выполняется справа налево и в самой первой итерации вызывается просто echo $b. Получение свойства объекта происходит на самом последнем шаге, когда это свойство уже равно deepest
nepster09: Я не очень понял ваш вопрос. Метод __toString вызывается в тот момент, когда мы пытаемся сделать echo $b - поскольку это объект, именно так объекты выводятся через echo.
Коротко - если у вас в функции такое количество переменных, что нужно совершать какую-то умственную работу, чтобы просто в них не запутаться - это значит, что пришла пора разбить эту функцию на более мелкие функции (то есть, декомпозировать ее).
Конечно, бывают и исключения, но они очень редки.
При чтении хорошего кода вообще не нужно задумываться о каких-то там переменных, хороший код оперирует абстракциями, а их в задаче как правило не очень много и легко удержать их в памяти.
Дмитрий Скогорев: c 1 марта 2012 года. Что касается кода, это пример, но его должно быть достаточно для дальнейшего развития. Я не знаю, что происходит у автора в коде, как видите, он привел ровно 2 строчки.