テクノロジー
2023年2月2日PHPリファクタリング
課題を提出する際は、以下のバージョンで提出をお願いします。
PHP基礎文法シリーズ課題の目的
シリーズ課題は、シリーズのゴールを達成しているかを判定するためのものです。
PHP基礎文法シリーズのゴール
- PHPの世界のオブジェクトを理解しながらプログラムを書くことができるようになる
- 基本的な文法や関数を学び、本格的な開発に入るための土台ができる
問題: 掲示板プログラムを関数に分割してみよう
前回までに作成したプログラムを改修して、関数に分割してみましょう。
前回までのコードは以下の通りです。
<?php
while (true) {
echo '実施したい処理を選択してください' . PHP_EOL;
echo '1:評価ポイントとコメントを入力する' . PHP_EOL;
echo '2:今までの結果を確認する' . PHP_EOL;
echo '3:終了する' . PHP_EOL;
$num = intval(readline());
switch ($num) {
case 1:
$point = intval(readline('1から5で評価を入力してください' . PHP_EOL));
while (true) {
if ($point <= 0 \\|\\| $point > 5) { // 0以下または5より大きいという条件式
$point = intval(readline('1から5で入力してください' . PHP_EOL));
} else {
$comment = readline('コメントを入力してください' . PHP_EOL);
$post = "ポイント: ${point} コメント: ${comment}" . PHP_EOL;
echo $post . PHP_EOL;
$file = fopen('data.txt', 'a');
fwrite($file, $post);
fclose($file);
break;
}
}
break;
case 2:
echo 'これまでの結果' . PHP_EOL;
$fread_file = fopen('data.txt', 'r');
while (($line = fgets($fread_file )) !== false) {
echo $line;
}
fclose($fread_file);
break;
case 3:
echo '終了します' . PHP_EOL;
break;
default:
echo '1から3で入力してください' . PHP_EOL;
}
}
どこを関数として切り出すか
全体がswitch
文で構成されていますが、case
の中にif
があるなど、コードが長くなっています。
switch
文を見た時にわかりやすいよう、以下のように再構成しましょう。
switch ($num) {
case 1:
// 関数呼び出し
break;
case 2:
// 関数呼び出し
break;
case 3:
echo '終了します' . PHP_EOL;
break;
default:
echo '1から3で入力してください' . PHP_EOL;
}
どのような処理をしているのかわかりやすい名前を考えて関数を定義し、呼び出してみましょう。
合格要件
- 新たに関数を定義し、処理が分割されていること
- 関数名は処理と関係のある命名がなされていること
- 実施する処理の選択で1から3以外を入力した際、”1から3で入力してください”というメッセージが表示され、再度選択させる処理が実行されること
- 評価ポイントの入力で1から5以外を入力した場合、”1から5で入力してください”というメッセージが表示され、再度評価ポイントを入力させる処理が実行されること
- 評価ポイントとコメントが入力できること
- 今までの結果を確認できること
- 処理を終了できること
提出方法
課題提出ページから、GitHubのリポジトリURLを提出してください。