来自强类型语言,我对PHP的魔术getter和setter方法感到不舒服。将它们应用到语言中的动机是什么?有关使用它们的一般建议是什么?
编辑:
我理解一般使用getter和setter背后的动机。我对使用magic getter和setter方法背后的动机感兴趣(而不是setProperty($property)
和getProperty()
方法)。
答案 0 :(得分:2)
有不同的意见,请阅读:
答案 1 :(得分:2)
PHP的魔术方法,__ get()和__set()也称为“重载”方法。来自PHP manual
PHP对“重载”的解释与大多数对象不同 面向语言。传统上重载提供了能力 有多个方法,名称相同但数量不同 论证的类型。
其中:
PHP中的重载提供了动态“创建”属性的方法 和方法。这些动态实体通过魔术方法处理 人们可以在课堂上建立各种行动类型。
基本上,__get()
,__set()
和__call()
是根据重载的PHP定义提供重载功能的。
这是一个有问题的问题,因为不同的人可能有不同的意见。话虽如此,他们可以习惯:
$object->method($data)
变为$object->data
)这些只是几个例子。您可能会发现Best Practices for __get() and __set()有用。
答案 2 :(得分:0)
在php中,如果你对魔术的吸气剂和制定者感到不舒服,你可以像在强烈类型语言中那样在你的课堂上写它们,你可以像使用它一样使用它它在那里。没有任何限制。我认为我们可以在symfony等框架中自动生成Getter和setter函数。如果您需要更多类型实施或控制属性,您可以编写魔术getter和setter的相应实现。
答案 3 :(得分:0)
我认为PHP魔术吸气剂和制定者是其中的一种疾病 当程序员需要处理代码中的字符串时,他和他的团队开始犯错误...(我认为你应该尽可能地避免关联数组......这是不安全的)
IDE
当您输入编辑器$a->get
时,获得一个获取者列表并且您不需要记住该类成员的确切情况。如果程序员的生活并不容易,那么应用程序就不容易了。
编程
在大多数语言中,getter和setter实际上是一个可以添加一些小逻辑的函数,在PHP中并不是那么明智。
开销
每个PHP魔术函数都有一些性能问题。
这是我的意见....