Почему функции в контроллерах и таблицах cakephp 3.x являются общедоступными, но функционируют в защищенных объектах?

Я использую cakephp 3.x

Я сделал это наблюдение. Функции в контроллерах и таблицах объявляются общедоступными. Функции в объектах объявляются защищенными. Почему функции сущностей не могут быть объявлены как общедоступные?

Это звучит так, будто вы понятия не имеете, когда и почему вы используете видимость . См. Этот вопрос: «В чем разница между публичным, частным и защищенным? ».

На самом деле ничто не мешает вам объявить публичный метод в сущности, попробуйте. Ничто не мешает вам использовать защищенные и частные в других классах. Но используйте их там, где это разумно. Также объекты уже имеют общедоступные методы . Я предлагаю вам прочитать главу об объектах в книге , в которой подробно объясняется, как работают сущности, каковы они и что они думают, и что вы можете с ними делать.

Объекты представляют данные, доступ к данным осуществляется через свойства или подобно массиву, потому что объект реализует ArrayAccess . Для доступа к виртуальным свойствам (опять же, прочтите главу) используются аксессоры и мутаторы, которые на самом деле защищены. Эти методы вызываются при попытке получить доступ к не существующему свойству, см. Метод get () . Они защищены, потому что прямой доступ к ним нежелателен, это может нарушить работу сущностей. Предполагается, что данные доступны только через свойства или метод get (), так что все сущности везде работают одинаково.

В хорошо написанном коде область видимости обычно имеет свою причину. Но я видел плохой код, где люди делали вещи частными, как сумасшедшие без причины, что фактически мешает вам изменять поведение объектов, наследуя их. Я не проверял, но я уверен, что вы не найдете частного метода в рамках, потому что он считается расширенным.

Итог: проанализируйте код и узнайте, почему что-то защищено, если вам нравится это знать. Это будет по другой причине от случая к делу.