2

私は Magento テンプレートに取り組んでいますが、この問題はどのテンプレート ロード システムにも当てはまります。

これらのテンプレートはテンプレート エンジンによって読み込まれるため、IDE (この場合は Aptana) が $this のオブジェクト タイプを認識する方法はありません。

単一のテンプレートが複数のオブジェクトによってロードされる可能性があるため、複数のオブジェクトが読み込まれる可能性がありますが、これを無視すると、$this オブジェクトの特定のクラスを指定するための正しい phpdoc 構文は何でしょうか?

4

3 に答える 3

3

次のように定義できます。

/* @var $this type */

type はクラス名です

于 2010-02-24T22:45:37.340 に答える
0

$this に対して @var を使用して型を定義しても機能しないことがわかりました。これは、おそらく $this が特別であり、Aptana によってそのように扱われるためです。私が考えるポスターと同様の必要性があります-テンプレートファイル(私の場合は、データクラス内の関数によって単純に配置され、含まれています)で、$thisのタイプを設定したいと考えています。@ashnazg が言うように、クラス定義内で $this の型を設定する必要はありません。これは、$this の型が常にクラスの型 (継承まで) であるためです。

ただし、テンプレート ファイルには回避策があります。テンプレートファイルの先頭に、次のようなものを配置するだけです

/**
 * @var My_Data_Model_Type
 */
$dataModel = &$this;

次に、テンプレートの$dataModel代わりに(または、あなたがそれを呼び出すために選択したもの-おそらくもっと短いもの)を使用します$this

于 2013-12-10T21:15:59.803 に答える
0

明確にするために、$thisを使用すると、現在のクラスのオブジェクトのみを示す必要がありますよね?

PhpDocumentor は現在 (v1.4.3) $thisを、クラス自体のデータ型に相当する特定のキーワードとして認識しません。

@return タグで使用するのに適切なデータ型の値は、PHP で認識されているデータ型と PhpDocumentor によって既に解析されているクラスのみです。常に「$this を返す」流暢なメソッドのドキュメント化を支援するために、PhpDocumtentor で利用可能ないくつかのオプションを用意するという機能要求があります。[1]

@var タグの場合、クラス変数に独自のクラス インスタンスを含めることがどのように実現できるかわかりません。そのため、「@var $this」の言うべきことを理解できません。

ただし、 $this の意図が $this を返す」流暢なメソッドではなく、単に PhpDocumentor および/または IDE へのショートカットであり、 $thisを使用して意味するデータ型を魔法のように推測することであった場合、私は 'それを行う方法はないと推測する必要があります。私ができる最も近い提案は、この特定の var/return が実行時にある可能性があるさまざまな子クラスすべてに共通の親である親クラスの名前を使用し、タグの説明部分を使用してインラインにすることです。可能な子クラスをリストする {@link} タグ。

例: Child1、Child2、および Child3 の子を持つ Parent 抽象クラスがあり、それぞれが実行時の Foo クラスで発生する可能性があります。

したがって、Foo::_var は実行時にこれらの子クラス型のいずれかになる可能性がありますが、これをどのように文書化すればよいでしょうか?

/**
 * @var Parent これは、{@link Parent}、{@link Child1}、{@link Child2}、または {@link Child3} のいずれかの子になります。
 */
保護された $_var;

「return $this」の問題に戻ると、同様の方法で文書化します。

/**
 * 流暢なメソッド (つまり、このクラスのインスタンス オブジェクトを返します)
 * @return Parent これは、{@link Parent}、{@link Child1}、{@link Child2}、または {@link Child3} のいずれかの子になります。
 */
パブリック関数 foo() {
   $これを返します。
}

このように文書化することで、少なくともクラスのドキュメントに特定のクラスへのリンクを含めることができます。それができないことは、流暢さを際立たせることです。ただし、IDE がクラス名を認識できる場合は、他のクラスへの必要な論理リンクを実行できる可能性があります。タグの説明でクラス名にカーソルを合わせると、Eclipse は少なくともポップアップ ヘルプでこれを実行できると思います。Eclipse がこれを使用して、さまざまな子クラスのメソッドをコード補完で使用できるようにすることはできないと思います。私が明示的にリストしたデータ型は Parent であるため、コード補完のための Parent メソッドについて知っているでしょうが、それは IDE ができる限りです。

[1] -- http://pear.php.net/bugs/bug.php?id=16223

于 2010-02-26T00:21:15.443 に答える