魔术方法是 PHP 中的最佳实践吗?
4 回答
缺点
文本搜索找不到函数
系统比较难理解,尤其是新手
重构工具可能会更频繁地失败
通常,魔术方法在幕后做事,程序员可能没有意识到它正在发生,这使得调试更加困难。
当搜索函数(或其他符号)无法找到所有匹配项时,删除旧代码将成为一场噩梦,这种恐惧会导致死代码堆积在代码库中。如果删除死代码,可能会导致未知位置的损坏。
我不认为魔术方法是最好的或最坏的做法:取决于你想要实现的目标,你可以使用它们还是不使用它们......我的意思是你不必尽可能地调整你的代码来使用它们,但是如果你必须没有问题。
如果您有一个具有 3 个且只有 3 个属性的对象,则不需要使用魔法 setter/getter,但在某些高级情况下,它们是完成非常复杂的事情(ORM 系统等)的好方法。
也许其中一些已被弃用,我不知道,但大多数都没有。
至少,其中一些神奇的功能是 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
无论如何,这些方法可能性能不佳,但它们根本没有被弃用。
我不这么认为。我的 IDE 无法向我显示魔法设置器和获取器的“提示”。尽管代码有时更难调试。
我不喜欢使用它们,而是更好地根据我的想法生成所需的方法(如许多 setter 和 getter)。