animal->dog->say('woof')
и на js очень плохо пахнет. Откуда вдруг такая иерархия? Должно быть наследование, просто его реализация различается в js и php, но сама парадигма при этом неизменна. код в два раза больше чем пример на js, для решения элементарной задачи.Это разные языки, решающие разные задачи, глупо ожидать от них идентичного поведения. А говнокод получается потому, что в php просто нет таких задач, которую вы пытаетесь решить. Что это за монструозная конструкция вообще? Почему её обязательно нужно делать объектом, чем не подходит ассоциативный массив?
но в теме переводчик, скорей всего, вообще не разбираетсяОсобенно хорошо это видно на примере упомянутого в вопросе "Совершенного кода", где разработку ПО перевели как "конструирование". Я купил исключительно для офисной коллекции, чтобы коллеги имели возможность почитать и был жутко разочарован уровнем перевода.