PHP:访问属性优缺点

时间:2017-07-10 12:05:42

标签: php oop methods getter-setter magic-methods

正如我所看到的,在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秒

链接:Complete results

这似乎表明魔术方法应该避免,除非必要,对于天真的吸气者和制定者来说也是如此,但(当然)这只是我机器每百万次访问的一小部分,并且“过早优化正如俗话所说,是所有邪恶的根源。

所以速度不应该是决定因素。

显然你可能希望对属性进行验证,所以我也可以看到天真的getter和setter对它有用。

那么何时应该使用这些方法?他们最适合哪种情况?

我意识到这可能因为主要是以意见为基础而被关闭,但我有机会得到一些好的答案,用逻辑和数据支持它们,可能会产生:)让我们看看!

1 个答案:

答案 0 :(得分:0)

在我的练习中,我使用(2):私有变量+ getter / setter。

根据SOLID意识形态,应避免直接访问(3)。

魔术方法(1):我建议可以使用(恕我直言),但我记得在15年以上的编程练习中我只需要一次。即使如此,也需要进行验证。