魔术方法是PHP的最佳实践吗?
答案 0 :(得分:41)
<强>缺点强>
文字搜索找不到功能
系统难以理解,特别是对于新手
重构工具可能会更频繁地失败
一般来说,魔术方法在幕后做事,程序员可能没有意识到这种情况正在发生,这使得调试变得更加困难。
当搜索函数(或其他符号)找不到所有匹配时,删除旧代码变成了一场噩梦,这种恐惧会导致死代码堆积在代码库中。如果删除死代码,可能会导致未知位置破损。
答案 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)。