use*_*486 1 php cakephp cakephp-3.0
我正在使用cakephp 3.x
我做了这个观察.控制器和表中的函数声明为public.实体中的函数声明为受保护.为什么实体功能不能被宣布为公共?
这听起来你不知道何时以及为何使用可见范围.看到这个问题" 公共,私有和受保护之间有什么区别? ".
实际上没有什么能阻止你在实体中声明一个公共方法,试试看.没有什么能阻止你在其他类中使用protected和private.但是在结构明智的地方使用它们.实体也已经有了公共方法.我建议你阅读本书中关于实体的章节,它详细解释了实体是如何工作的,它们是什么以及它们的思考方式以及你可以用它们做些什么.
实体表示数据,数据通过属性或类似数组访问,因为对象实现了ArrayAccess.要访问虚拟属性(再次阅读本章),使用访问器和增变器,实际上是受保护的.当您尝试访问非现有属性时会调用这些方法,请参阅get()方法.它们受到保护,因为不希望直接访问它们,它会破坏实体的工作方式.数据被认为只能通过属性或get()方法访问,以便所有实体都可以使用相同的数据.
在编写良好的代码中,可见性范围通常有原因.但是我看到了糟糕的代码,人们在没有理由的情况下疯狂地私有化,这有效地阻止了你通过继承来改变对象的行为.我没有检查,但我很确定你不会在框架中找到私有方法,因为它被认为是扩展的.
底线:Analzye代码并了解为什么某些东西受到保护,如果你想知道它.根据具体情况,这将是一个不同的原因.