8

最近、HTML 要素を作成するためのクラスを作成しました。既存の HTML 要素と属性ごとにわざわざメソッドを作成する代わりに、魔法のメソッド __get と __call を使用することにしました。したがって、私のコードでは、基本的にこれを行うことができます:

$signUpForm->insert->input->type('text')->name('firstName')->maxlength(100)->disabled
$signUpForm->insert->input->type('email')->name('emailAddress')->maxlength(100)

しかし、この「魔法」をシンプルに保つことにしたので、次のようにすることもできます。

$signUpForm->insert->magic->trick('rabbit')->accessory('hat')結果は次のようになります。

<magic trick='rabbit' accessory='hat'>

私の意見では、多くの定型コードを削減し、必要なことを正確に実行するため、これはすべて良いことです。クラスで HTML 標準を強制するのではなく、HTML の使用方法を知っていれば、HTML を容易にするクラスが必要です (正直なところ、これを行うコードは非常に小さいです)。

私の質問は、このクラスが未定義のプロパティまたはメソッドを受け入れることができることを考えると、PHPDoc でこの動作を指定する方法はありますか? 私は運なしで次のことを試しました:

/**
 * @property HtmlElementAttribute *    Insert a new HTML element attribute
 * @method   HtmlElementAttribute *    Insert a new HTML element attribute
 */

これが単なるPHPStormの問題かどうかはわかりませんが、同様のシナリオはどこにも見つかりませんでした...

また、なぜ私がそのようなことをするのか疑問に思われているかもしれませんが、PHP コードの特定の HTML の側面 (フォームで宣言された ID、フォーム内の要素など) を追跡するためです。これにより、HTML をエンド ユーザーに送信する前に HTML を表示できます。

4

1 に答える 1

13

質問は未回答リストにまだ残っているので、回答します。

やのような自動魔法のメソッドを使用する場合にPhpStormまたはSublimeで適切なコード インテリジェンスを得るには、追加する暗黙的なプロパティまたはメソッドごとにor行を含める必要があります。私はこれがひどいことを知っていますが、それはそのような方法を使用するためのコストです.__get()__call()@property@method

__get()本当に十分な価値がある場合は、使用する際に考慮してください。あなたのアプリに適しているかもしれませんが、その場合は問題ありません。通常、オブジェクト データをさらに処理したり抽象化したりする場合に使用します (キャメル ケースの名前変換など)。いくつかのコードを保存します (とにかくPhpStormが作成します) が、クラスにPhpDoc DocBlock行を作成する必要があります。

クラスを文書化する以外の理由がなければ、すべての行を含めることを検討してください。暗黙的なプロパティを使用すると、IDE がどのメソッドと属性が有効なメンバーであるかを知るのが難しくなるだけでなく、次のメンテナーにとっても難しくなります。これらの docblock 行は不必要に見えるかもしれませんが、優れたドキュメントです。

于 2015-06-23T15:29:46.790 に答える