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

OM *_*ity 34 php magic-methods

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

Hei*_*ski 41

缺点

  1. 文本搜索找不到这些功能

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

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

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

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


mai*_*450 24

我不认为魔术方法是最佳或最差的练习:取决于你想要实现的目标,你可以使用或不使用......我的意思是你不必调整代码尽可能使用它们,但是如果你不得不完全没有问题.

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

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


Rol*_*olf 7

至少,Google建议使用其中一些魔术功能:

避免写天真的二传手和吸气剂

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

class dog {
  public $name = '';

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

  public function getName() {
    return $this->name;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

$rover = new dog();
$rover->setName('rover');
echo $rover->getName();
Run Code Online (Sandbox Code Playgroud)

直接设置和调用name属性可以 快100%,并缩短开发时间.

$rover = new dog();
$rover->name = 'rover';
echo $rover->name;
Run Code Online (Sandbox Code Playgroud)

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

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

无论如何,这些方法可能不具备性能,但它们根本不被弃用.

  • 在这里,另一个意见:http://www.garfieldtech.com/sites/default/files/benchmarks.png:D(见http://www.garfieldtech.com/blog/magic-benchmarks) (2认同)
  • 这个答案完全偏离主题."Google"并不反对使用本机getter/setter与魔术功能.如果他们只是直接修改属性,他们建议不要使用本机getter/setter.这不是一回事. (2认同)