Zend Framework の紹介

 Learning Zend Framework

appendix

 Zend Framework リファレンス


  • 第36章 Zend_Gdata
  • 第37章 Zend_Http
  • 第38章 Zend_InfoCard
  • 第39章 Zend_Json
  • 第40章 Zend_Layout
  • 第41章 Zend_Ldap
  • 第42章 Zend_Loader
  • 第43章 Zend_Locale
  • 第44章 Zend_Log
  • 第45章 Zend_Mail
  • 第46章 Zend_Markup
  • 第47章 Zend_Measure
  • 第48章 Zend_Memory
  • 第49章 Zend_Mime
  • 第50章 Zend_Navigation
  • 第51章 Zend_Oauth
  • 第52章 Zend_OpenId
  • 第53章 Zend_Paginator
  • 第54章 Zend_Pdf
  • 第55章 Zend_ProgressBar
  • 第56章 Zend_Queue
  • 第57章 Zend_Reflection
  • 第58章 Zend_Registry
  • 第59章 Zend_Rest

  • 第60章 Zend_Search_Lucene
  • 第61章 Zend_Serializer
  • 第62章 Zend_Server
  • 第63章 Zend_Service
  • 第64章 Zend_Session
  • 第65章 Zend_Soap
  • 第66章 Zend_Tag
  • 第67章 Zend_Test
  • 第68章 Zend_Text
  • 第69章 Zend_TimeSync
  • 第70章 Zend_Tool
  • 第71章 Zend_Tool_Framework
  • 第72章 Zend_Tool_Project
  • 第73章 Zend_Translate
  • 第74章 Zend_Uri
  • 第75章 Zend_Validate
  • 第76章 Zend_Version
  • 第77章 Zend_View
  • 第78章 Zend_Wildfire
  • 第79章 Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 70.6% Update 2010-11-28 - Revision 23415

    23.3. オプションおよび引数の取得

    Zend_Console_Getopt オブジェクトでオプションを宣言し、 コマンドラインあるいは配列から引数を受け取ったら、 このオブジェクトを使用して、ユーザがプログラムを起動した際に 指定したオプションを取得できます。 このクラスはマジックメソッドを実装しているので、 オプションの名前を指定して問い合わせることができます。

    実際にデータをパースするのは、Zend_Console_Getopt に対する最初の問い合わせを行ったときです。 つまり、パースを行う前にいくつかのメソッドで オプションや引数、ヘルプ文字列や設定項目を変更することができるということです。

    23.3.1. Getopt の例外処理

    ユーザがコマンドラインで無効な引数を指定すると、 パース関数は Zend_Console_Getopt_Exception をスローします。この例外を、アプリケーションのコードで処理する必要があります。 parse() メソッドを使用して、オブジェクトに引数をパースさせます。 try ブロック内で parse() を実行できるので、便利です。 パースに成功すると、それ以降で再度例外がスローされることはありません。 スローされた例外オブジェクトで、独自のメソッド getUsageMessage() が使用できます。これは、宣言されているすべてのオプションについての 使用法を説明した文字列を返します。

    例 23.3. Getopt の例外処理

    try {
        
    $opts = new Zend_Console_Getopt('abp:');
        
    $opts->parse();
    } catch (
    Zend_Console_Getopt_Exception $e) {
        echo 
    $e->getUsageMessage();
        exit;
    }

    例外が発生するのは、次のような場合です。

    • 指定したオプションが認識できない場合。

    • パラメータが必要なオプションで、パラメータが指定されていない場合。

    • オプションのパラメータの型が不正な場合。 たとえば整数型を要求するオプションで非数値文字列が渡された場合など。

    23.3.2. 名前によるオプションの取得

    getOption() メソッドを使用すると、 オプションの値を問い合わせることができます。 そのオプションがパラメータを持っている場合は、 このメソッドはパラメータの値を返します。 パラメータを持っていないオプションでユーザがパラメータを指定した場合は、 このメソッドは TRUE を返します。 それ以外の場合は、このメソッドは NULL を返します。

    例 23.4. getOption() の使用法

    $opts = new Zend_Console_Getopt('abp:');
    $b $opts->getOption('b');
    $p_parameter $opts->getOption('p');

    あるいは、マジックメソッド __get() を使用して、 まるでクラスのメンバ変数であるかのようにオプションの値を取得することもできます。 また、マジックメソッド __isset() も実装しています。

    例 23.5. マジックメソッド __get() および __isset() の使用例

    $opts = new Zend_Console_Getopt('abp:');
    if (isset(
    $opts->b)) {
        echo 
    "オプション b を取得しました。\n";
    }
    $p_parameter $opts->p// 設定されていない場合は null となります

    オプションにエイリアスが指定されている場合は、 上の方法でそのエイリアスを使用することもできます。

    23.3.3. オプションの取得

    ユーザがコマンドラインで入力したオプションの全一覧を取得するには、 いくつかの方法があります。

    • 文字列で取得: toString() メソッドを使用します。 オプションの内容が、空白で区切られた flag=value 形式の文字列で返されます。パラメータを持たないオプションの場合、 value の部分はリテラル文字列 "TRUE" となります。

    • 配列で取得: toArray() メソッドを使用します。 オプションは、数値インデックスの配列で返されます。 配列の各要素の値は文字列で、フラグの後に (もしあれば) パラメータが続きます。

    • JSON データを含む文字列として取得: toJson() メソッドを使用します。

    • XML データを含む文字列として取得: toXml() メソッドを使用します。

    これらのすべての出力メソッドで、フラグ文字列として使用するのは エイリアスリストの先頭にあるものです。たとえば あるオプションのエイリアスが verbose|v のように宣言されていたとすると、最初の文字列である verbose をオプション名として使用します。 オプションフラグ名には、先頭のダッシュは含みません。

    23.3.4. 非オプション引数の取得

    オプション引数およびそのパラメータをコマンドラインからパースした後も、 まだ追加の引数が残っているかも知れません。これらの引数を取得するには getRemainingArgs() メソッドを使用します。このメソッドは、 どのオプションにも属さない文字列の配列を返します。

    例 23.6. getRemainingArgs() の使用法

    $opts = new Zend_Console_Getopt('abp:');
    $opts->setArguments(array('-p''p_parameter''filename'));
    $args $opts->getRemainingArgs(); // array('filename') を返します

    Zend_Console_Getopt は、GNU の慣習である「ダッシュふたつだけの引数があったら、 オプションはそこで終わりとみなす」をサポートしています。 その後に続く引数は、非オプション引数として扱わなければなりません。 これは、オプションではない引数がダッシュで始まる場合などに有用です。 たとえば "rm -- -filename-with-dash" のような場合です。

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...