重複の可能性:
MagicメソッドはPHPのベストプラクティスですか?
これらは単純な例ですが、クラスに2つより多くのプロパティがあると想像してください。
ベストプラクティスは何でしょうか?
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をハックして、やりたくないことをすることでした。そしてそれはうまくいった。しかし、悪いことが起こりました。
しかし、これについてもっと意見を聞きたいと思います。