Для моделей идея состоит в том, что открытые методы являются открытым интерфейсом класса.Публичные методы предназначены для использования другими объектами, в то время как защищенные / частные методы должны быть скрыты извне.
Это та же практика, что и в других объектно-ориентированных языках.
Для контроллеры и тесты, просто делайте как хотите. И контроллер, и тестовые классы только создаются и вызываются платформой ( да, я знаю, что вы можете теоретически получить контроллер из представления, но если вы сделаете это, что-то странное в любом случае ).Поскольку никто никогда не создаст эти вещи напрямую, не от чего будет «защищаться».
Добавление / исправление: Для контроллеров вы должны пометить «вспомогательные» методы как protected частный, и только сами действия должны быть публичными.Фреймворк никогда не будет направлять входящие HTTP-вызовы на действия / методы, которые не являются общедоступными, поэтому ваши вспомогательные методы должны быть защищены таким образом.
Для помощников не имеет значения, является ли метод защищенным или закрытым,так как они всегда называются «напрямую».
Вы можете пометить вещи защищенными во всех этих случаях, если это, конечно, облегчит вам понимание.