正如我所看到的,在PHP中访问对象属性有三种方法:
1。魔术方法
public function __get($property) {
if (property_exists($this, $property)) {
return $this->$property;
}
}
public function __set($property, $value) {
if (property_exists($this, $property)) {
$this->$property = $value;
}
}
2。朴素的吸气者和塞特犬
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
第3。直接
// Set name
$dog->name = "rover";
// Get name
$name = $dog->name;
我的问题是这些方法应该何时使用/避免? (即每种方法的优点和缺点是什么?)。
纯粹就速度而言,我做了一些分析,三者之间存在很大的性能差异。在我的机器上,平均有一百万次访问:
魔术方法速度
0.58秒
Naive Getters and Setters Speed
0.13秒
直接访问速度
0.05秒
这似乎表明魔术方法应该避免,除非必要,对于天真的吸气者和制定者来说也是如此,但(当然)这只是我机器每百万次访问的一小部分,并且“过早优化正如俗话所说,是所有邪恶的根源。
所以速度不应该是决定因素。
显然你可能希望对属性进行验证,所以我也可以看到天真的getter和setter对它有用。
那么何时应该使用这些方法?他们最适合哪种情况?
我意识到这可能因为主要是以意见为基础而被关闭,但我有机会得到一些好的答案,用逻辑和数据支持它们,可能会产生:)让我们看看!
答案 0 :(得分:0)
在我的练习中,我使用(2):私有变量+ getter / setter。
根据SOLID意识形态,应避免直接访问(3)。
魔术方法(1):我建议可以使用(恕我直言),但我记得在15年以上的编程练习中我只需要一次。即使如此,也需要进行验证。