关于为吸气剂和制定者使用魔法的一般建议是什么?

时间:2011-09-07 09:41:52

标签: php

来自强类型语言,我对PHP的魔术getter和setter方法感到不舒服。将它们应用到语言中的动机是什么?有关使用它们的一般建议是什么?

编辑:

我理解一般使用getter和setter背后的动机。我对使用magic getter和setter方法背后的动机感兴趣(而不是setProperty($property)getProperty()方法)。

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

实施[__get()和__set()]背后的动机是什么?

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魔术函数都有一些性能问题。

这是我的意见....