最佳实践:PHP 魔术方法__set和__get
2022-08-30 07:05:23
可能的重复:
魔术方法在PHP中是最佳实践吗?
这些都是简单的示例,但假设您的类中的属性比两个属性多。
什么是最佳实践?
a) 使用__get和__set
class MyClass {
private $firstField;
private $secondField;
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;
}
}
}
$myClass = new MyClass();
$myClass->firstField = "This is a foo line";
$myClass->secondField = "This is a bar line";
echo $myClass->firstField;
echo $myClass->secondField;
/* Output:
This is a foo line
This is a bar line
*/
b) 使用传统的二传手和收盘机
class MyClass {
private $firstField;
private $secondField;
public function getFirstField() {
return $this->firstField;
}
public function setFirstField($firstField) {
$this->firstField = $firstField;
}
public function getSecondField() {
return $this->secondField;
}
public function setSecondField($secondField) {
$this->secondField = $secondField;
}
}
$myClass = new MyClass();
$myClass->setFirstField("This is a foo line");
$myClass->setSecondField("This is a bar line");
echo $myClass->getFirstField();
echo $myClass->getSecondField();
/* Output:
This is a foo line
This is a bar line
*/
本文内容: http://blog.webspecies.co.uk/2011-05-23/the-new-era-of-php-frameworks.html
作者声称使用魔术方法不是一个好主意:
首先,当时使用PHP的魔术功能(__get,__call等)非常流行。从第一眼看它们没有错,但它们实际上真的很危险。它们使API不清楚,自动完成是不可能的,最重要的是它们很慢。他们的用例是破解PHP来做它不想做的事情。它奏效了。但让坏事发生了。
但我想听听更多关于这方面的意见。