2

私は、一般的なセッターやゲッター、__call() を使用して実装されたラッパー クラスなど、多くの目的で魔法のメソッドを広く使用しています。現在、ドクトリンを研究しており、モデルで指定した場合、実際には魔法のゲッターとセッターを使用していないのではないかと思いました。

だから私の質問は、どのように教義が魔法の方法を省略したのですか? docterine のような ORM で特に魔法のメソッドを使用することの欠点は何ですか?

4

1 に答える 1

3
  • マジックコードは文書化して理解するのが難しいです。通常、すべての関数にコメントを追加し、ツールを使用して
    ドキュメントを生成する必要があります。これは魔法のメソッドでは機能しません。

  • マジックメソッドは型ヒントをサポートしていません。関数を使用してプロパティを設定する最大の利点の1つは、型ヒントを使用できることです。このようなコード

    public function setUser(User $ user){this-> user = $ user}

    userプロパティに常に有効なユーザーオブジェクトまたはnullが含まれていることを確認してください。

  • IDEはマジックメソッドをサポートしていません。最新のPHPIDEの多くは、オートコンプリートをサポートしています。関数とメソッドは、単純なパーサーによって認識されます。このパーサーは、マジックのgetsetまたはcall操作を検出できません。

魔法のメソッドは明示的なメソッドよりも遅いと聞きましたが、自分でテストしたことはありません。

では、魔法を使わずにどうやってそれを行うのですか?テンプレートを使用してゲッターとセッターを生成しますが、通常は__callをまったく使用しません。

マジックメソッドは、プロキシオブジェクトやその他の特殊なツールを作成するための非常に便利なツールですが、すべてのクラスで使用するべきではありません。

于 2012-07-27T12:10:09.147 に答える