我来自强类型语言,对PHP中神奇的getter和setter方法感到不舒服。将它们实现到语言中的动机是什么?关于使用它们的一般建议是什么?
编辑:
我大体上理解使用getter和setter背后的动机。我感兴趣的是使用神奇的getter和setter方法(相对于setProperty($property)
和getProperty()
方法)背后的动机。
发布于 2011-09-07 11:26:00
我认为PHP神奇的getter和setter是它的病症之一。
当程序员需要处理代码中的字符串时,他和他的团队开始犯错误……(这是y,我认为你应该尽量避免使用assoc数组……它不安全)
集成开发环境
当您在编辑器中输入$a->get
时,您会得到一个getter列表,并且您不需要记住类成员的确切大小写。如果程序员的生活不容易,那么应用程序也不容易。
编程
在大多数语言中,getter和setter实际上是一个函数,你可以在其中添加一些小逻辑,这在PHP中做得并不明智。
开销
每个PHP魔术函数都有一些性能问题。
这是我的意见..。
发布于 2011-09-07 09:59:19
发布于 2011-09-07 11:13:39
实现__get()和__set()背后的动机是什么
PHP的神奇方法__get()和__set()也被称为“重载”方法。从PHP manual
PHP对“重载”的解释与大多数面向对象语言不同。传统上,重载提供了具有相同名称但不同数量和类型的参数的多个方法的能力。
其中,作为:
中的重载提供了动态“创建”属性和方法的方法。这些动态实体是通过魔术方法处理的,可以在一个类中为各种动作类型建立这些方法。
基本上,引入__get()
、__set()
和__call()
是为了根据重载的定义提供重载功能。
关于使用它们的一般建议是什么?
这是一个负载很大的问题,因为不同的人可能有不同的观点。也就是说,它们可以用来:
创建一个属性read-only
$object->method($data)
变为$object->data
))
这些只是几个例子。您可能会发现Best Practices for __get() and __set()很有用。
https://stackoverflow.com/questions/7331740
复制