scr*_*fix 4 php getter setter properties class
我正在通过观看大量视频教程和阅读大量文章来学习 PHP 面向对象编程。我看到的许多 PHP OOP 教程都说使用 getter 和 setter。这对我来说毫无意义。为什么我会将类属性设为私有或受保护,然后使用函数公开该属性?我开始研究并在这里找到了现在乞求这个问题的文章:
你应该在 PHP 中使用 getter 和 setter 而不是直接访问类的属性吗?
如果是,为什么?(非技术术语,请。其他一些问题给出了原因,但它们太技术性了,我无法理解他们试图解释的内容)
如果没有,为什么不呢?
注意:在阅读一些类似的 Stack Overflow 问题时,我注意到这篇由 Google 开发人员撰写的帖子。
避免编写幼稚的 setter 和 getter!在 PHP 中编写类时,您可以通过直接使用对象属性而不是编写简单的 setter 和 getter 来节省时间并加快脚本速度。在以下示例中,狗类使用 setName() 和 getName() 方法来访问 name 属性。
直接设置和调用 name 属性可以将运行速度提高 100%,并减少开发时间。
Google 提供了使用它们对您的代码的速度影响的证据。
正如我的近乎同名所说,getter 和 setter 的主要目的是副作用。你总是使用 getter 和 setter 的原因是代码的可维护性。
假设您有一个 10000 多行代码的项目,并且您有$foo->bar散布在各处的作业。然后突然间您决定要在每次 foo 的 bar 更改时记录日志。通过直接访问,您需要浏览整个代码库并找到所有分配。如果您有一个 setter,只需添加一行代码即可:分配的位置没有任何变化。
或者,假设您有一个在构造函数中计算的 age 属性。一段时间后,你认为它不够好;您想在每次需要时计算它。这需要一个函数,直接访问是不会削减它的。如果您从直接访问开始,您需要将它的每个实例更改为函数调用。如果您从一个简单的 getter 开始,您可以通过修改 getter 来更改return $this->age为日期计算或数据库调用或任何您想要的:没有其他任何更改。
红宝石使得这成为一个普通的教条:有没有公共属性,只有getter / setter方法(在Ruby世界称为存取),正是因为允许在对象的唯一作用是消息传递(除非你使用魔法)。Ruby 还可以创建微不足道的 getter/setter... 错误,微不足道,这使得它对开发时间的影响可以忽略不计。在 PHP 中,您可以选择。