マジックメソッドはPHPのベストプラクティスですか?
4 に答える
短所
テキスト検索で関数が見つかりません
システムは、特に初心者にとっては理解しにくいです
リファクタリングツールはより頻繁に失敗する可能性があります
一般に、魔法のメソッドは舞台裏で物事を行い、プログラマーはそれが起こっていることに気付かない可能性があり、デバッグが難しくなります。
関数(または他のシンボル)を検索してもすべての一致が見つからない場合、古いコードを削除することは悪夢になり、この恐れにより、デッドコードがコードベースに蓄積される可能性があります。デッドコードを削除すると、不明な場所で破損する可能性があります。
魔法の方法が最善または最悪の方法だとは思いません。達成したいことに応じて、それらを使用できるかどうか...つまり、使用するためにコードを可能な限り微調整する必要はありませんが、必要な場合は全く問題ありません。
属性が3つだけのオブジェクトがある場合は、魔法のセッター/ゲッターを使用する必要はありませんが、高度なケースでは、非常に複雑なこと(ORMシステムなど)を実行するのに最適な方法です。
たぶんそれらのいくつかは非推奨です、私は知りません、しかしそれらのほとんどはそうではありません。
少なくとも、これらの魔法の機能のいくつかはグーグルによって推奨されています:
ナイーブなセッターやゲッターを書くことは避けてください
PHPでクラスを作成する場合、単純なセッターやゲッターを作成するのではなく、オブジェクトプロパティを直接操作することで、時間を節約し、スクリプトを高速化できます。次の例では、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は、魔法のセッターとゲッターの「ヒント」を表示できません。ただし、コードのデバッグが難しい場合があります。
私はそれらを使用しないことを好み、私のideによって必要なメソッド(多くのセッターやゲッターなど)をより適切に生成します。