Я извиняюсь, фабрика тут действительно на месте. Но без указания, куда её вставить, ценность ответа не очень высокая. И как следствие - фабрика выбирает голос, а не животное, а это уже совсем неверно.
Фабрика нужна, чтобы выбрать животное. А каким голосом оно будет говорить - это его внутреннее дело.
в общем, повторюсь - главное что у нас каждый занимается строго своим делом:
- человек не имеет вообще никакого касательства к выбору голоса. своим голосом занимается само животное.
- человек не занимается определением, какое животное ему велели потрогать
меня сначала унесло в сторону первого правила, поскольку в коде было перемешано и животное, и его голос.
и только потом я уже занялся вторым.
но вот опять же - правильно сделав иерархию классов (голос - животное - человек) - уже потом проще сделать это самое "вынести логику соотношения наверх, за пределы класса".
Хотя это тоже не самый правильный вариант. Мы заранее создаем сущности, которые нам не нужны.
Так что да, нужна будет фабрика, которая создаёт животных.
у меня ведь и был этот вариант но я его зачем-то переделал в коллекцию
Я все время отстаю на один комментарий :)
В общем, я дополнил ответ.
С одной стороны, у меня получился фактически такой же VoiceFactoryImpl из ответа Михаила.
Но с другой стороны, у него это там выбор голоса, а это неправильно. Выбирать надо животное, а не голос.
Самое смешное - до меня только что дошло, что на вопрос я не ответил.
В коде отсутствует решение для исходной задачи - как по строке потрогать определённое животное.
Но если задуматься, то в коде этих классов его и не должно быть.
Это должен быть внешний, по отношению к ним код.
Иван, спрашивать @KGB1st-а бессмысленно, он вообще не знает языка
в данном случае !empty($col) совершенно лишнее
и в целом так делать не рекомендуется. как я писал, обращение к несуществующей переменной - это логическая ошибка. Которую надо исправить, а не заметать под ковёр.
ой-ой, юное дарование решило мир осчастливить, а ему палки в колеса вставляют. Крылья подрезают :)
вот только у дарования с логикой беда, а в остальном все нормально
пускай познаёт, чо