![見出し画像](https://assets.st-note.com/production/uploads/images/117812268/rectangle_large_type_2_1a4ddf28211e599aebe5495ad43c799e.png?width=1200)
PHPで標準入力する方法
PHPで標準入力する方法をお伝えします。CLIで動作する簡単なアプリを一緒に作ってみましょう。
プログラムが実行される時、必要な情報を流し込む場所が必要です。それが標準入力と呼ばれるものです。一般的にはキーボード入力のことを指します。
PHPをCLIで実行する方法は下記の記事を参考にしてください。
筆者の開発環境
PC:Apple M1 チップ搭載MacBook Air
OS:macOS Ventura 13.6
PHP:8.2.0
標準入力を利用して計算問題を作成しよう
ターミナルを起動し、下記のコマンドを実行して新しいファイルを作成してください。
touch calc.php
vimで編集します。(普段お使いのエディタでもかまいません。)
vim calc.php
「i」(小文字のアイ)を入力し、insertモードにしてください。下記のコードを入力してください。
標準入力されたデータは数字であっても文字列の扱いになるのでシングルクォートで囲むのを忘れないようにしてください。
trim関数を通し余計な空白と改行コードを標準入力から削除しています。
<?php
echo '計算問題です。答えを入力してください。' . PHP_EOL;
echo '第1問' . PHP_EOL;
echo '3 + 5 =' . PHP_EOL;
echo '>>> ';
$answer = trim(fgets(STDIN));
if ($answer === '8') {
echo '正解です。' . PHP_EOL;
} else {
echo '不正解です。答えは 8 です。' . PHP_EOL;
}
sleep(1);
echo '第2問' . PHP_EOL;
echo '8 + 7 =' . PHP_EOL;
echo '>>> ';
$answer = trim(fgets(STDIN));
if ($answer === '15') {
echo '正解です。' . PHP_EOL;
} else {
echo '不正解です。答えは 15 です。' . PHP_EOL;
}
入力が完了したらescキーを押して「:wq」と入力し保存して閉じてください。下記のコマンドを実行し動作を確かめてください。「>>> 」の後に答えを入力できるはずです。
php calc.php
![](https://assets.st-note.com/img/1696230413048-baO4IbjMT4.png)
ループ処理を使ってじゃんけんゲームを作成しよう
下記のコマンドを実行して新しいファイルを作成してください。
touch jyanken.php
次のようなルールにしましょう。
グー => 0
チョキ => 2
パー => 5
「exit」が入力されたらゲームを終了とします。
vimで編集しましょう。(普段お使いのエディタでもかまいません。)
vim jyanken.php
「i」(小文字のアイ)を入力し、insertモードにしてください。下記のコードを入力してください。少し長いのでじっくり見てみてください。
先程の計算問題の時とtrimするタイミングが異なりますので注意してください。whileの条件文内でtrimしてしまうと、'0'が入力された時falseと解釈されてループが終了してしまうためです。
<?php
$computer = [0, 2, 5];
$histories = [];
echo 'じゃんけん!ほい!' . PHP_EOL;
echo '>>> ';
while($input = fgets(STDIN)) {
$input = trim($input);
// 入力値チェック
if (!in_array($input, ['0', '2', '5', 'exit'], true)) {
echo '入力可能な文字は 0, 2, 5, exit のいずれかです。' . PHP_EOL;
echo '>>> ';
continue;
}
// exitが入力されたらゲーム終了
if ($input === 'exit') break;
// コンピューターの手を決定
$computerInput = array_rand($computer);
// 勝敗判定
if ($input === '0') {
if ($computer[$computerInput] === 0) {
echo 'あいこです。' . PHP_EOL;
$nextWord = 'あいこでしょ!';
} elseif ($computer[$computerInput] === 2) {
echo 'あなたの勝ちです。' . PHP_EOL;
$nextWord = 'じゃんけん!ほい!';
} elseif ($computer[$computerInput] === 5) {
echo 'あなたの負けです。' . PHP_EOL;
$nextWord = 'じゃんけん!ほい!';
}
} elseif ($input === '2') {
if ($computer[$computerInput] === 0) {
echo 'あなたの負けです。' . PHP_EOL;
$nextWord = 'じゃんけん!ほい!';
} elseif ($computer[$computerInput] === 2) {
echo 'あいこです。' . PHP_EOL;
$nextWord = 'あいこでしょ!';
} elseif ($computer[$computerInput] === 5) {
echo 'あなたの勝ちです。' . PHP_EOL;
$nextWord = 'じゃんけん!ほい!';
}
} elseif ($input === '5') {
if ($computer[$computerInput] === 0) {
echo 'あなたの勝ちです。' . PHP_EOL;
$nextWord = 'じゃんけん!ほい!';
} elseif ($computer[$computerInput] === 2) {
echo 'あなたの負けです。' . PHP_EOL;
$nextWord = 'じゃんけん!ほい!';
} elseif ($computer[$computerInput] === 5) {
echo 'あいこです。' . PHP_EOL;
$nextWord = 'あいこでしょ!';
}
}
// 自分が出した手を記録しておく
$histories[] = $input;
sleep(1);
echo $nextWord . PHP_EOL;
echo '>>> ';
}
echo 'じゃんけんゲームを終了しました。' . PHP_EOL;
echo 'あなたの出した手は下記の通りです。' . PHP_EOL;
print_r($histories);
入力が完了したらescキーを押して「:wq」と入力し保存して閉じてください。下記のコマンドを実行し動作を確かめてください。exitを入力するまで何度でもじゃんけんができるはずです。何回勝てましたか?
php jyanken.php
![](https://assets.st-note.com/img/1696230445661-XIDEKqjxB5.png)
解説は以上です。おつかれさまでした。
PHP/Laravelのシステム開発は株式会社パパグラムへぜひご相談ください。
この記事が気に入ったらサポートをしてみませんか?