【PHP】コマンドライン引数 – コマンドライン実行時に値を与える

【PHP】コマンドライン引数 – コマンドライン実行時に値を与える

コマンドラインからPHPプログラムを実行するときに値を与えることができます。

その値をコマンドライン引数と呼び、ここではその使い方について解説します。

検証環境

コマンドライン引数

コマンドライン引数は“コマンドラインからプログラムに与える値”です。

『引数(パラメーター)』はプログラム処理の外部から与える値のことで、コマンドラインから値を与えるため、『コマンドライン引数』と呼びます。

コマンドライン引数を使うと、ソースコードに値を定義する必要がないため、様々な値に対応したプログラムを作成できます。

値の与え方

コマンドライン引数として、プログラムに値を与えるには、phpコマンドの実行時に値を付与します。

基本構文

$ php ソースコードファイル 値1 値2 値3 ...

値はスペースで区切って複数個与えることができます。

※ 末尾の...は4個目、5個目も付与できるという意味です。

サンプル

$ php sample.php Hello World

このphpコマンドのサンプルは、sample.phpを実行する時にHelloWorldの2つの値を与えています。

値の受け取り方

コマンドライン引数の値を受け取るには、ソースコードで$argv変数を使用します。

$argvはPHPに初めから用意されている変数です。

配列型で、コマンドライン引数を記憶しています。

配列型の説明は割愛しますが、未学習の方は“複数の値を記憶できる変数”とイメージしてください。

$argvはphpコマンドを実行した時の、php以降の文字列をスペース区切りで順番に記憶しています。

基本構文

$argv[キー]

キー(インデックスとも呼ぶ)の部分に取得したいコマンドライン引数の番号を記述します。

サンプル

<?php

// 1個目のコマンドライン引数
___ih_hl_start
echo $argv[0] . "\n";
___ih_hl_end

// 2個目のコマンドライン引数
___ih_hl_start
echo $argv[1] . "\n";
___ih_hl_end

// 3個目のコマンドライン引数
___ih_hl_start
echo $argv[2] . "\n";
___ih_hl_end

?>
$ php sample.php Hello World
sample.php
Hello
World

コマンドラインのphpコマンド実行時にphp以降のsample.phpHelloWorld$argv変数に順番に記憶されます。

コマンドライン引数と$argvのデータ

$argv[キー]キーの部分に指定した番号の値を取得できますが、番号は0から始まることに注意してください。

また、このサンプルから分かるようにソースコードファイル(sample.php)もコマンドライン引数の1つになっています。

コマンドライン引数の型は文字列型です。

数字のみでも文字列型となります。

<?php

var_dump($argv[1]);
var_dump($argv[2]);

?>
$ php sample.php Hello 10000
string(5) "Hello"
string(5) "10000"

スペースを含む値

コマンドライン引数はスペースで区切られます。

そのため、スペースを含む値を与える場合はシングルクォート(')で括ります。

<?php

echo $argv[1] . "\n";
echo $argv[2] . "\n";

?>
$ php sample.php 'Hello World!' 'Good Morning!'
Hello World!
Good Morning!

演習問題

問題1

次の実行結果になるプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 実行結果の文字列はコマンドライン引数の値を使用
$ php practice.php Good Morning
Good
Morning

問題2

次の実行結果になるプログラムを作成してください。
なお、下記の条件を満たすものとします。

  • 実行結果の文字列はコマンドライン引数の値を使用
$ php practice.php 'Have a good night!'
Have a good night!