<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 17132 -->
<sect1 id="zend.reflection.reference">
    <title>Zend_Reflectionリファレンス</title>

    <para>
        <classname>Zend_Reflection</classname>の様々なクラスは、
        PHPの<ulink url="http://php.net/reflection">Reflection API</ulink>のAPIに良く似ています。
        しかし、一つ重要な違いがあります。
        PHPのReflection APIはdocblock注釈タグの内部、パラメータ変数の型も返す型も、
        参照することができません。
    </para>

    <para>
        <classname>Zend_Reflection</classname>は、
        パラメーター変数の型や返す型を判断するために、
        メソッドのdocblock注釈を解析します。
        特に<code>@param</code>及び<code>@return</code>注釈が使われます。
        しかしながら、"短い"説明や"長い"説明ばかりではなく、
        その他の注釈タグも検査することができます。
    </para>

    <para>
        <classname>Zend_Reflection</classname>のそれぞれのReflectionオブジェクトは、
        <classname>Zend_Reflection_Docblock</classname>のインスタンスを返すように、
        <code>getDocblock()</code>を上書きします。
        このクラスはdocblock及び注釈タグを参照できるようにします。
    </para>

    <para>
        <classname>Zend_Reflection_File</classname>はPHPファイルの内部を参照できる新しいReflectionクラスです。
        それを使って、PHPファイルに含まれるクラスや関数、グローバルなPHPコードを取得できます。
    </para>

    <para>
        最後に、その他のReflectionオブジェクトを返す様々なメソッドにおいて、
        ２番目の引数としてクラス名を、
        返されたReflectionオブジェクトで使用できます。
    </para>

    <sect2 id="zend.reflection.reference.docblock">
        <title>Zend_Reflection_Docblock</title>

        <para>
            <classname>Zend_Reflection_Docblock</classname>は
            PHPのReflection API以上に<classname>Zend_Reflection</classname>に価値を付与する心臓部です。
            それには下記のメソッドがあります:
        </para>

        <itemizedlist>
            <listitem><para>
                <code>getContents()</code>: docblockの完全な内容を返します
            </para></listitem>

            <listitem><para>
                <code>getStartLine()</code>: 定義されたファイル内での
                docblock開始位置を返します
            </para></listitem>

            <listitem><para>
                <code>getEndLine()</code>: 定義されたファイル内での
                docblock終了行を返します
            </para></listitem>

            <listitem><para>
                <code>getShortDescription()</code>: 短い、一行の説明を取得します
                (たいていはdocblockの最初の行)
            </para></listitem>

            <listitem><para>
                <code>getLongDescription()</code>: docblockの長い説明を取得します
            </para></listitem>

            <listitem><para>
                <code>hasTag($name)</code>: 与えられた注釈タグが
                docblockにあるかどうか判断します
            </para></listitem>

            <listitem><para>
                <code>getTag($name)</code>: 与えられた注釈タグのReflectionオブジェクト、
                または存在しない場合<constant>FALSE</constant>を返します
            </para></listitem>

            <listitem><para>
                <code>getTags($filter)</code>: 全てのタグ、
                または与えられた<code>$filter</code>文字列に一致する全てのタグを取得します。
                タグは<classname>Zend_Reflection_Docblock_Tag</classname>オブジェクトの配列として返されます。
            </para></listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.reflection.reference.docblock-tag">
        <title>Zend_Reflection_Docblock_Tag</title>

        <para>
            <classname>Zend_Reflection_Docblock_Tag</classname>は個別の注釈タグのためのReflectionを提供します。
            ほとんどのタグは名前と説明から構成されています。
            いくつかの特別なタグの場合には、
            適切なクラスのインスタンスを取得するための、
            ファクトリーメソッドをクラスで提供します。
        </para>

        <para>
            下記のメソッドは<classname>Zend_Reflection_Docblock_Tag</classname>のために定義されています:
        </para>

        <itemizedlist>
            <listitem><para>
                <code>factory($tagDocblockLine)</code>: 注釈タグReflectionクラスをインスタンス化して返します。
            </para></listitem>

            <listitem><para>
                <code>getName()</code>: 注釈タグの名前を返します
            </para></listitem>

            <listitem><para>
                <code>getDescription()</code>: 注釈の説明を返します
            </para></listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.reflection.reference.docblock-tag-param">
        <title>Zend_Reflection_Docblock_Tag_Param</title>

        <para>
            <classname>Zend_Reflection_Docblock_Tag_Param</classname>は
            <classname>Zend_Reflection_Docblock_Tag</classname>の特化したバージョンです。
            <code>@param</code>注釈タグの説明はパラメータの型及び変数名、変数の説明から構成されています。
            このクラスにより下記のメソッドが<classname>Zend_Reflection_Docblock_Tag</classname>に追加されます:
        </para>

        <itemizedlist>
            <listitem><para>
                <code>getType()</code>: パラメータ変数の型を返します
            </para></listitem>

            <listitem><para>
                <code>getVariableName()</code>: パラメータ変数の名前を返します
            </para></listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.reflection.reference.docblock-tag-return">
        <title>Zend_Reflection_Docblock_Tag_Return</title>

        <para>
            <classname>Zend_Reflection_Docblock_Tag_Param</classname>のように、
            <classname>Zend_Reflection_Docblock_Tag_Return</classname>は
            <classname>Zend_Reflection_Docblock_Tag</classname>の特化したバージョンです。
            <code>@return</code>注釈タグの説明は返す型及び変数の説明から構成されています。
            このクラスにより下記のメソッドが<classname>Zend_Reflection_Docblock_Tag</classname>に追加されます:
        </para>

        <itemizedlist>
            <listitem><para>
                <code>getType()</code>: 戻す型を返します
            </para></listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.reflection.reference.file">
        <title>Zend_Reflection_File</title>

        <para>
            <classname>Zend_Reflection_File</classname>によりPHPファイル内部を参照できます。
            それを使って、ファイルで定義されたクラスや関数、生のPHPコードを参照することができます。
            下記の関数が定義されています:
        </para>

        <itemizedlist>
            <listitem><para>
                <code>getFileName()</code>: Reflectionを使用したファイルの名前を取得します
            </para></listitem>

            <listitem><para>
                <code>getStartLine()</code>: ファイルの開始行を返します（常に１）
            </para></listitem>

            <listitem><para>
                <code>getEndLine()</code> 最終行、ファイル中の行数を取得します
            </para></listitem>

            <listitem><para>
                <code>getDocComment($reflectionClass =
                    'Zend_Reflection_Docblock')</code>: ファイルレベルのdocblock Reflectionオブジェクトを取得します
            </para></listitem>

            <listitem><para>
                <code>getClasses($reflectionClass =
                    'Zend_Reflection_Class')</code>: Reflectionオブジェクトの配列を取得します。
                    ファイルに定義されているそれぞれのクラスです。
            </para></listitem>

            <listitem><para>
                <code>getFunctions($reflectionClass =
                    'Zend_Reflection_Function')</code>: Reflectionオブジェクトの配列を取得します。
                    ファイルに定義されているそれぞれの関数です。
            </para></listitem>

            <listitem><para>
                <code>getClass($name = null, $reflectionClass =
                    'Zend_Reflection_Class')</code>: 一つのクラスのReflectionオブジェクトの配列を取得します
            </para></listitem>

            <listitem><para>
                <code>getContents()</code>: ファイルの全てのコンテンツを取得します。
            </para></listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.reflection.reference.class">
        <title>Zend_Reflection_Class</title>

        <para>
            <classname>Zend_Reflection_Class</classname>は<classname>ReflectionClass</classname>を拡張して、
            そのAPIに追随します。
            ひとつ追加のメソッド、<code>getDeclaringFile()</code>を追加します。
            それは定義されたファイルでの<classname>Zend_Reflection_File</classname> Reflectionオブジェクトを
            取得するために使われるでしょう。
        </para>

        <para>
            さらに、下記のメソッドはReflectionオブジェクトを取り出すときに使う
            Reflectionクラスを指定する際に追加の変数を加えます。:
        </para>

        <itemizedlist>
            <listitem><para>
                <code>getDeclaringFile($reflectionClass = 'Zend_Reflection_File')</code>
            </para></listitem>

            <listitem><para>
                <code>getDocblock($reflectionClass = 'Zend_Reflection_Docblock')</code>
            </para></listitem>

            <listitem><para>
                <code>getInterfaces($reflectionClass = 'Zend_Reflection_Class')</code>
            </para></listitem>

            <listitem><para>
                <code>getMethod($reflectionClass = 'Zend_Reflection_Method')</code>
            </para></listitem>

            <listitem><para>
                <code>getMethods($filter = -1, $reflectionClass = 'Zend_Reflection_Method')</code>
            </para></listitem>

            <listitem><para>
                <code>getParentClass($reflectionClass = 'Zend_Reflection_Class')</code>
            </para></listitem>

            <listitem><para>
                <code>getProperty($name, $reflectionClass =
                    'Zend_Reflection_Property')</code>
            </para></listitem>

            <listitem><para>
                <code>getProperties($filter = -1, $reflectionClass =
                    'Zend_Reflection_Property')</code>
            </para></listitem>

        </itemizedlist>
    </sect2>

    <sect2 id="zend.reflection.reference.extension">
        <title>Zend_Reflection_Extension</title>

        <para>
            <classname>Zend_Reflection_Extension</classname>は<classname>ReflectionExtension</classname>を拡張して、
            そのAPIに追随します。
            それはReflectionオブジェクトを取り出すときに使う
            Reflectionクラスを指定する際に追加の変数を加えて、
            下記のメソッドを上書きします。
        </para>

        <itemizedlist>
            <listitem><para>
                <code>getFunctions($reflectionClass =
                    'Zend_Reflection_Function')</code>: エクステンションで定義された関数を
                    示す配列を取得します。
            </para></listitem>

            <listitem><para>
                <code>getClasses($reflectionClass =
                    'Zend_Reflection_Class')</code>: エクステンションで定義されたクラスを
                    示す配列を取得します。
            </para></listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.reflection.reference.function">
        <title>Zend_Reflection_Function</title>

        <para>
            <classname>Zend_Reflection_Function</classname>は、
            返されたReflectionを使ってReflectionクラスを指定できるように、
            いくつかのメソッドを上書きするばかりではなく、
            関数の返り値を取得するメソッドを追加します。
        </para>

        <itemizedlist>
            <listitem><para>
                <code>getDocblock($reflectionClass =
                    'Zend_Reflection_Docblock')</code>: 関数docblockの
                    Reflectionオブジェクトを取得します
            </para></listitem>

            <listitem><para>
                <code>getParameters($reflectionClass =
                    'Zend_Reflection_Parameter')</code>: 関数のパラメータ
                    Reflectionオブジェクト全ての配列を取得します
            </para></listitem>

            <listitem><para>
                <code>getReturn()</code>: 戻す型のReflectionオブジェクトを取得します
            </para></listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.reflection.reference.method">
        <title>Zend_Reflection_Method</title>

        <para>
            <classname>Zend_Reflection_Method</classname>は<classname>Zend_Reflection_Function</classname>を継承して、
            追加のメソッドを１つだけ上書きします:
        </para>

        <itemizedlist>
            <listitem><para>
                <code>getParentClass($reflectionClass =
                    'Zend_Reflection_Class')</code>: 親クラスのReflectionオブジェクトを取得します
            </para></listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.reflection.reference.parameter">
        <title>Zend_Reflection_Parameter</title>

        <para>
            <classname>Zend_Reflection_Parameter</classname>は
            戻されたReflectionオブジェクトで
            Reflectionを使えるようにする上書きメソッドばかりではなく、
            パラメータの型を取得するメソッドを追加します。
        </para>

        <itemizedlist>
            <listitem><para>
                <code>getDeclaringClass($reflectionClass =
                    'Zend_Reflection_Class')</code>: もし可能ならば、
                    Reflectionオブジェクトとしてパラメータの宣言クラスを取得します。
            </para></listitem>

            <listitem><para>
                <code>getClass($reflectionClass =
                    'Zend_Reflection_Class')</code>: もし可能ならば、
                    Reflectionオブジェクトとしてパラメータのクラスを取得します。
            </para></listitem>

            <listitem><para>
                <code>getDeclaringFunction($reflectionClass =
                    'Zend_Reflection_Function')</code>: もし可能ならば、
                    Reflectionオブジェクトとしてパラメータの関数を取得します。
            </para></listitem>

            <listitem><para>
                <code>getType()</code>: パラメータの型を取得します
            </para></listitem>
        </itemizedlist>
    </sect2>

    <sect2 id="zend.reflection.reference.property">
        <title>Zend_Reflection_Property</title>

        <para>
            <classname>Zend_Reflection_Property</classname>は、
            戻されたReflectionオブジェクトクラスを指定するための、
            メソッドを１つ上書きします。:
        </para>

        <itemizedlist>
            <listitem><para>
                <code>getDeclaringClass($reflectionClass =
                    'Zend_Reflection_Class')</code>: Reflectionオブジェクトとして
                    プロパティーの宣言クラスを取得します
            </para></listitem>
        </itemizedlist>
    </sect2>
</sect1>
