36

マジックメソッドはPHPのベストプラクティスですか?

4

4 に答える 4

43

短所

  1. テキスト検索で関数が見つかりません

  2. システムは、特に初心者にとっては理解しにくいです

  3. リファクタリングツールはより頻繁に失敗する可能性があります

一般に、魔法のメソッドは舞台裏で物事を行い、プログラマーはそれが起こっていることに気付かない可能性があり、デバッグが難しくなります。

関数(または他のシンボル)を検索してもすべての一致が見つからない場合、古いコードを削除することは悪夢になり、この恐れにより、デッドコードがコードベースに蓄積される可能性があります。デッドコードを削除すると、不明な場所で破損する可能性があります。

于 2010-04-23T12:51:04.567 に答える
25

魔法の方法が最善または最悪の方法だとは思いません。達成したいことに応じて、それらを使用できるかどうか...つまり、使用するためにコードを可能な限り微調整する必要はありませんが、必要な場合は全く問題ありません。

属性が3つだけのオブジェクトがある場合は、魔法のセッター/ゲッターを使用する必要はありませんが、高度なケースでは、非常に複雑なこと(ORMシステムなど)を実行するのに最適な方法です。

たぶんそれらのいくつかは非推奨です、私は知りません、しかしそれらのほとんどはそうではありません。

于 2010-04-23T12:03:23.893 に答える
8

少なくとも、これらの魔法の機能のいくつかはグーグルによって推奨されています:

ナイーブなセッターやゲッターを書くことは避けてください

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

アーカイブバージョン:https ://web.archive.org/web/20120208060457/http://code.google.com/speed/articles/optimizing-php.html

とにかく、これらのメソッドはパフォーマンスが良くないかもしれませんが、まったく非推奨ではありません。

于 2010-04-23T11:57:46.677 に答える
3

私はそうは思わない。私のIDEは、魔法のセッターとゲッターの「ヒント」を表示できません。ただし、コードのデバッグが難しい場合があります。

私はそれらを使用しないことを好み、私のideによって必要なメソッド(多くのセッターやゲッターなど)をより適切に生成します。

于 2010-04-23T10:57:48.873 に答える