36

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

4

4 回答 4

43

缺点

  1. 文本搜索找不到函数

  2. 系统比较难理解,尤其是新手

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

通常,魔术方法在幕后做事,程序员可能没有意识到它正在发生,这使得调试更加困难。

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

于 2010-04-23T12:51:04.567 回答
25

我不认为魔术方法是最好的或最坏的做法:取决于你想要实现的目标,你可以使用它们还是不使用它们......我的意思是你不必尽可能地调整你的代码来使用它们,但是如果你必须没有问题。

如果您有一个具有 3 个且只有 3 个属性的对象,则不需要使用魔法 setter/getter,但在某些高级情况下,它们是完成非常复杂的事情(ORM 系统等)的好方法。

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

于 2010-04-23T12:03:23.893 回答
8

至少,其中一些神奇的功能是 Google 推荐的:

避免编写幼稚的 setter 和 getter

在 PHP 中编写类时,您可以通过直接使用对象属性而不是编写幼稚的 setter 和 getter 来节省时间并加快脚本速度。在下面的示例中,dog 类使用 setName() 和 getName() 方法来访问 name 属性。

class dog {
  public $name = '';

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

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

请注意,setName() 和 getName() 只是分别存储和返回 name 属性。

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

直接设置和调用 name 属性可以将运行 速度提高 100%,并减少开发时间。

$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

无论如何,这些方法可能性能不佳,但它们根本没有被弃用。

于 2010-04-23T11:57:46.677 回答
3

我不这么认为。我的 IDE 无法向我显示魔法设置器和获取器的“提示”。尽管代码有时更难调试。

我不喜欢使用它们,而是更好地根据我的想法生成所需的方法(如许多 setter 和 getter)。

于 2010-04-23T10:57:48.873 回答