tl;dr
を介して実装された関数に (PHPDoc で) 注釈を付ける正しい方法は何__callStatic
ですか? さらに重要: NetBeansとPHPStorm にこれらが静的メソッドであることを理解させる方法はありますか?
動機
全体像が必要な場合は、この質問にたどり着いた方法を次に示します。
問題: 現在のプロジェクトでは、実際にはシングルトン (DB プロキシなど) である必要があるクラスが大量にあります。言うまでもなく、少なくとも数百行はrequire_once
あり$foo = new FooProxy();
ます。
解決策:魔法のメソッドLoader
を使用して、これを解決するクラスを作成した__callStatic
ので、単に$foo = Loader::FooProxy();
. 私たちの目的には完璧ですが、
問題: この方法では、チームで使用されるいずれの IDE にも明らかに型ヒントがありません。
解決策: すべてのモジュールは のサブクラスを定義し、Loader
単に にルーティングするメソッドを追加し__callStatic
ます。
問題: オートコンプリートのためだけに、実際に解釈されたコードを追加することは受け入れられません (これは議論の余地がありますが、とりあえず受け入れましょう)。
解決策: 実際のメソッドを追加せず、次のように PHPDoc でメソッドを宣言するだけにしましょう。
<?php
/**
* @method FooProxy FooProxy()
*/
class BarLoader extends Loader {}
?>
問題:FooProxy
静的メソッドではありません。次のいずれも静的にしません。
<?php
/**
* @static
* @method FooProxy FooProxy()
*/
///////////////
/**
* @static @method A A()
* @method static A A()
* @method A static A()
* @method A A() static
*/
クラスを抽象化しても違いはありません。約 1 時間の Google'ing では解決策が見つかりませんでした。主な目標は、IDE にこれらの機能を認識させることです。正しい PHPDoc を用意する必要はありません。