PHP中的魔术方法最佳实践吗?

时间:2010-04-23 10:53:30

标签: php magic-methods

魔术方法是PHP的最佳实践吗?

4 个答案:

答案 0 :(得分:41)

<强>缺点

  1. 文字搜索找不到功能

  2. 系统难以理解,特别是对于新手

  3. 重构工具可能会更频繁地失败

  4. 一般来说,魔术方法在幕后做事,程序员可能没有意识到这种情况正在发生,这使得调试变得更加困难。

    当搜索函数(或其他符号)找不到所有匹配时,删除旧代码变成了一场噩梦,这种恐惧会导致死代码堆积在代码库中。如果删除死代码,可能会导致未知位置破损。

答案 1 :(得分:24)

我不认为魔术方法是最佳或最差的练习:取决于你想要达到的目的,你可以使用或不使用它们...... 我的意思是你不必调整你的代码就可以使用它们,但是如果你必须这样做就没有问题。

如果你有一个只有3个且只有3个属性的对象你不需要使用魔术setter / getter,但在某些高级情况下,它们是处理非常复杂事物的好方法(ORM系统等......)< / p>

也许其中一些已被弃用,我不知道,但大多数都不是。

答案 2 :(得分:7)

至少,Google建议使用其中一些神奇功能:

  

避免写天真的设定者和吸气剂

     

在PHP中编写类时,可以节省时间并加快速度   脚本直接使用对象属性,而不是   写天真的二传手和吸气剂。在下面的例子中,狗   class使用setName()和getName()方法来访问名称   属性。

class dog {
  public $name = '';

  public function setName($name) {
    $this->name = $name;
  }

  public function getName() {
    return $this->name;
  }
}
     

请注意,setName()和getName()只执行store和   分别返回name属性。

$rover = new dog();
$rover->setName('rover');
echo $rover->getName();
     

可以直接设置和调用name属性   up to 100% faster,以及减少开发时间。

$rover = new dog();
$rover->name = 'rover';
echo $rover->name;

原始链接:http://code.google.com/speed/articles/optimizing-php.html

存档版本:https://web.archive.org/web/20120208060457/http://code.google.com/speed/articles/optimizing-php.html

无论如何,这些方法可能不具备性能,但根本不予弃用。

答案 3 :(得分:3)

我不这么认为。我的IDE无法向魔术二传手和吸气者显示“提示”。尽管代码有时难以调试。

我更喜欢不使用它们,更好地通过我的ide生成所需的方法(比如许多setter和getter)。