見出し画像

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
計算問題アプリ

ループ処理を使ってじゃんけんゲームを作成しよう

下記のコマンドを実行して新しいファイルを作成してください。

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
じゃんけんゲーム

解説は以上です。おつかれさまでした。

PHP/Laravelのシステム開発は株式会社パパグラムへぜひご相談ください。

この記事が気に入ったらサポートをしてみませんか?