为什么cakephp 3.x控制器和表中的函数是公共的,但实体中的函数受到保护?

时间:2015-09-27 06:06:58

标签: php cakephp cakephp-3.0

我正在使用cakephp 3.x

我做了这个观察。控制器和表中的函数声明为public。实体中的函数声明为受保护。为什么不能将实体函数声明为公共函数?

1 个答案:

答案 0 :(得分:6)

这听起来你不知道何时以及为何使用the visibility scope。请同时查看此问题“What is the difference between public, private, and protected?”。

实际上没有什么能阻止你在实体中声明一个公共方法,试试看。没有什么能阻止你在其他类中使用protected和private。但是在结构明智的地方使用它们。 Also entities already have public methods。我建议您read the chapter about entities in the book,它详细解释了实体如何运作,它们是什么以及它们的思考方式以及您可以用它们做些什么。

实体表示数据,数据通过属性或类似数组访问,因为对象实现了ArrayAccess。要访问虚拟属性(再次阅读本章),使用访问器和增变器,实际上是受保护的。当您尝试访问非现有属性see the get() method时,会调用这些方法。它们受到保护,因为不希望直接访问它们,它会破坏实体的工作方式。数据被认为只能通过属性或get()方法访问,以便所有实体都可以使用相同的文件。

在编写良好的代码中,可见性范围通常有原因。但是我看到了糟糕的代码,人们在没有理由的情况下疯狂地私有化,这有效地阻止了你通过继承来改变对象的行为。我没有检查,但我很确定你不会在框架中找到私有方法,因为它被认为是扩展的。

底线:Analzye代码并了解为什么某些内容受到保护如果你想知道它。不同的情况会有不同的原因。