0

私のコードには次のものがあります

/**
 * The primary database connection object
 * 
 * @global object $GLOBALS['db']
 * @name $db
 */
global $db;

これで十分だと思うかもしれませんが、phpdoc を実行すると、ドキュメントやその他のグローバル変数のどこにもこの変数について言及されていません。何を与える?これはドキュメントからそのままです。この変数をグローバルとして認識して記録しないのはなぜですか?

二次的な質問として、関数で使用されるすべての関数でここに記載されている説明を繰り返さなくても、関数で使用されるグローバル変数を参照できるようにする必要があるようです。理論的には正しいですか? どうやってそれを機能させるのですか?

わからない。Phpdoc は理論的には優れたツールのように思えますが、私は好きではないようです。

4

1 に答える 1

2

グローバルが効果的に初期化されるコードとしてあなたの例を取ります:

/**
 * the primary database connection object
 *
 * @global resource $GLOBALS['db']
 * @name $db
 */
$GLOBALS['db'] = getConnection(...);

ここでは、「@global datatype $globalvariablename」という形式を使用する必要があることに注意してください。また、「$GLOBALS['db']」の使用を「global $db」を示すコード内の他の場所と一致させる必要がある場合は、「@name $globalvariablename」タグを含める場所にも注意してください。代わりに、コード内で "$GLOBALS['db'] ではなく単に "$db = " を使用すると、@name タグが冗長になり不要になります。私としては、 $GLOBALS['db'] を使用することを選択します。したがって、コード内でグローバルを非常に明示的に表示したいという理由だけで、両方の global+name タグが必要です (少なくとも、グローバルをリファクタリングできない場合は ;-) )。

コード例で「global」キーワードを使用すると、グローバル変数の初期化ではなく、実際に関数/メソッド内にいることを意味します。その場合、メソッドの docblock には次の形式のグローバル タグが必要です。

/**
 * my method that uses a global
 *
 * @global resource the universally available database connection object
 */
public function foo {
    global $db;

    // do stuff here that uses the $db connection
}

ここでの形式は「@global datatype description」であり、上記のものとは異なることに注意してください。また、ここには @name タグを入れ ません。

ここで、phpDocumentor はコード自体の「global $db」行を認識し、グローバル自体の初期化を個別に docblock した 場所を探します。

ドキュメントで何かを見るためには、そのような「@global」の使用法の両方が存在する必要があると思います.後者は、文書化されたメソッドがグローバルを使用していることを示し、前者はメソッドのドキュメントに情報があることを示します.その特定のグローバルについて表示します。

参考文献:

[1] -- @global -- http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.global.pkg.html

[2] -- @name -- http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.name.pkg.html

于 2012-08-28T19:56:03.680 に答える