関数の概要
PHPの getopt 関数は、CLI(コマンドラインインターフェイス)でスクリプトに渡された引数を解析し、オプションとして扱いやすい形で取得するための関数です。シェルスクリプトのオプション解析に近い形式で使うことができ、長いオプション名(–helpなど)や短いオプション名(-hなど)を簡単に扱えます。
パラメータの説明
short_options:必須。1文字の短いオプションを指定する文字列です。オプションに引数を持たせたい場合は、その後にコロン(:)を付けます。例えば、"a:b"はオプションは引数必須、は引数なしという意味です。long_options:省略可能。長いオプション名の配列を渡します。引数が必要な場合は名前の後に等号(=)を付けます。例えば、["help", "file="]は--help(引数なし)、--file(引数必須)を表します。
戻り値
解析結果は連想配列として返されます。キーがオプション名、値がオプションに渡された引数(引数なしの場合は false または空文字列)となります。パースに失敗した場合は false を返します。
使用例
基本的な使い方
<?php
$options = getopt("a:b");
print_r($options);
?>
上記では -a に引数が必須、-b は引数無しのオプションを定義しています。
例えば、php script.php -a hello -b のように呼び出すと、$options に ["a" => "hello", "b" => false] がセットされます。
長いオプションの使用例
<?php
$options = getopt("h", ["help", "file:"]);
if (isset($options["h"]) || isset($options["help"])) {
echo "Help表示しますn";
}
if (isset($options["file"])) {
echo "ファイル名: " . $options["file"] . "n";
}
?>
この例では、-h または --help でヘルプ表示、--file でファイル名指定を受け付けます。
複数オプションを扱う例
<?php
$options = getopt("u:p:s", ["user:", "password:", "silent"]);
if (isset($options["u"]) || isset($options["user"])) {
echo "ユーザー名: " . ($options["u"] ?? $options["user"]) . "n";
}
if (isset($options["p"]) || isset($options["password"])) {
echo "パスワード: " . ($options["p"] ?? $options["password"]) . "n";
}
if (isset($options["s"]) || isset($options["silent"])) {
echo "サイレントモードですn";
}
?>
ユーザー名、パスワード、サイレントモードの3種類のオプションを短縮形・長い形式どちらでも受け付けられます。
関連する関数
parse_str– クエリ文字列を配列に解析するための関数argv変数 – CLI引数の生の配列を取得するグローバル変数
まとめ
getopt 関数は、PHPスクリプトをCLIで実行する際に非常に便利な引数解析ツールです。短いオプションや長いオプションの両方を扱え、引数の有無も明確に管理できるため、コマンドラインツールを実務的に作成する際に欠かせません。この記事の例を参考に、自分のスクリプトに適したオプション解析を実装してみてください。
