我正在通过观看大量的视频教程和阅读过程中的大量文章来学习PHP面向对象的编程.我看到的许多PHP OOP教程都说使用getter和setter.这对我没有意义;为什么我会将类属性设置为私有或受保护,然后使用函数公开公开该属性?我开始研究并在这里找到文章,现在请求这个问题:
你应该在PHP中使用getter和setter而不是直接访问类的属性吗?
如果是,为什么? (非技术术语,请.其他一些问题给出了理由,但它们技术性很强,我无法理解他们试图解释的内容)
如果不是,为什么不呢?
注意:在阅读一些类似的Stack Overflow问题时,我注意到this post由Google开发人员编写.
Avoid writing naive setters and getters! When writing classes in PHP, you can save time and speed up your scripts by working with object properties directly, rather than writing naive setters and getters. In the following example, the dog class uses the setName() and getName() methods for accessing the name property.
Setting and calling the name property directly can run up to 100% faster, as well as cutting down on development time.
谷歌提供了proof关于使用它们对您的代码的速度影响.
解决方法:
正如我的近名同名所说,吸气剂和二传手的主要目的是副作用.你总是使用getter和setter的原因是代码可维护性.
假设您有一个10000行代码项目,并且您已经分配到$foo->条遍布全部.然后突然你决定每次foo的栏改变时都要记录.通过直接访问,您需要浏览整个代码库并查找所有分配.如果你有一个setter,那就是添加一行代码:在分配的地方没有任何变化.
或者,假设您有一个在构造函数中计算的age属性.一段时间后,你认为它不够好;你想在每次需要时计算它.这需要一个功能,直接访问不会削减它.如果从直接访问开始,则需要将其中的每个实例更改为函数调用.如果你从一个简单的getter开始,你可以通过修改getter将return $this-> age更改为日期计算或数据库调用或任何你想要的东西:没有其他更改.
Ruby使这成为一个普遍的教条:没有公共属性,只有getter / setter(在Ruby世界中称为访问器),正是因为允许对象的唯一交互是消息传递(除非你使用魔法). Ruby也会创建琐碎的getter / setter ……错误,琐碎,这使得它对开发时间的影响可以忽略不计.在PHP中,您可以选择.