Doctrineで生成された〜TableクラスのgetInstanceスタティックメソッド
Doctrineの割と最近の修正で、生成されたモデルクラスのうち、〜Tableクラスに、以下のようなgetInstanceメソッドが追加されるようになりました。
<?php class ManageUsersTable extends Doctrine_Table { public static function getInstance() { return Doctrine::getTable('ManageUsers'); } }
これは、Doctrineへの以下のチケットに対する対応として実装されたようです。
このチケットの内容にあるように、これまでは〜Tableクラスにメソッドを定義しても、Doctrineの作法としては
<?php Doctrine_Core::getTable('ManageUsers')->hogeMethod();
というように、とても面倒で、直感的ではない記述をしていました。
これは、Doctrine内部で(おそらく、処理効率を上げるために)テーブルクラスのインスタンスをキャッシュするようになっており、キャッシュが作られやすくするための苦肉の策として生まれた作法だったんじゃないかと、私は想像しています。
この作法は(内部の効率の点で)踏襲すべきですが、コードの見やすさという点では、新しく導入されたgetInstanceメソッドを積極的に利用した方がいいんじゃないかと、私は考えています。例えば上の例だと、以下のようになります。
<?php ManageUsersTable::getInstance()->hogeMethod();
補足:現時点ではsymfony側でphpDocが削除される
せっかくDoctrine側でgetInstanceメソッドと、そのphpDocを自動生成するようになったので、本来であればIDEが対応していれば自動的にgetInstanceメソッドの戻り値を該当するクラスのオブジェクトとして認識してくれます。
ですが、現時点ではsymfony側でDoctrineの出力したコードのコメントを全部削除しており、この部分は中途半端な状態になってしまっています。
symfony側のコメント削除の修正
Doctrine側の修正
symfony側の修正が、「コーディング規約」を理由にしているのでなんとも言えない感じですが・・・。