no message
This commit is contained in:
16
Question16-Exception/Ex01.php
Normal file
16
Question16-Exception/Ex01.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex01 例外処理基本]
|
||||
*
|
||||
* TODO:
|
||||
* 1. 関数 divide($numerator, $denominator) を作成してください。
|
||||
* - $denominator が 0 の場合、Exception を投げる。
|
||||
* - 正常な場合は、$numerator / $denominator の結果を返す。
|
||||
*
|
||||
* 2. GETリクエストで分子(num)と分母(den)の値を受け取り、divide() を呼び出す処理を実装してください。
|
||||
*
|
||||
* 3. 例外が発生した場合は try-catch ブロックで捕捉し、「Error: {エラーメッセージ}」と出力すること。
|
||||
*
|
||||
*
|
||||
*/
|
||||
14
Question16-Exception/Ex02.php
Normal file
14
Question16-Exception/Ex02.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex02 例外の伝播]
|
||||
*
|
||||
* TODO:
|
||||
* 1. innerFunction($value) を作成し、$value が負の場合に Exception を投げるようにしてください。
|
||||
*
|
||||
* 2. outerFunction($value) を作成し、内部で innerFunction($value) を呼び出すが、例外は捕捉せず伝播させること。
|
||||
*
|
||||
* 3. メイン部分で outerFunction() を呼び、try-catch ブロックで例外を捕捉してエラーメッセージを出力すること。
|
||||
*
|
||||
*
|
||||
*/
|
||||
26
Question16-Exception/Ex03.php
Normal file
26
Question16-Exception/Ex03.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex03 例外キャッチの記述順序修正]
|
||||
*
|
||||
* TODO:
|
||||
* 以下のコードは、例外キャッチの順序が誤っています。正しく、より具体的な例外を先にキャッチするように修正してください。
|
||||
*
|
||||
* --- 修正前のコード ---
|
||||
*
|
||||
* try {
|
||||
* if (rand(0,1)) {
|
||||
* throw new InvalidArgumentException("Invalid argument provided.");
|
||||
* } else {
|
||||
* throw new Exception("General exception occurred.");
|
||||
* }
|
||||
* } catch (Exception $e) {
|
||||
* echo "Caught Exception: " . $e->getMessage();
|
||||
* } catch (InvalidArgumentException $e) {
|
||||
* echo "Caught InvalidArgumentException: " . $e->getMessage();
|
||||
* }
|
||||
*
|
||||
* --- ここまで ---
|
||||
*
|
||||
*
|
||||
*/
|
||||
22
Question16-Exception/Ex04.php
Normal file
22
Question16-Exception/Ex04.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex04 カスタム例外の利用 - CSVファイル処理]
|
||||
*
|
||||
* 難易度:中級
|
||||
*
|
||||
* TODO:
|
||||
* 1. 以下の仕様に従って、カスタム例外クラスを作成してください。
|
||||
* (1) FileNotFoundException クラスを作成し、Exception を継承する。
|
||||
* (2) CSVFormatException クラスを作成し、Exception を継承する。
|
||||
*
|
||||
* 2. 関数 processCSV($filename) を作成してください。
|
||||
* - $filename が "data.csv" でない場合は、FileNotFoundException を投げる。
|
||||
* - $filename が "data.csv" の場合、仮のCSVデータ(例: "John,25,Engineer\nAlice,30,Designer")を用い、
|
||||
* 各行がカンマで区切られているかをチェックし、問題があれば CSVFormatException を投げる。
|
||||
* - 正常な場合は、各行を配列に変換して返す。
|
||||
*
|
||||
* 3. メイン部分で、processCSV() を呼び出し、try-catch ブロックで例外を捕捉し、適切なエラーメッセージを出力してください。
|
||||
*
|
||||
*
|
||||
*/
|
||||
20
Question16-Exception/Ex05.php
Normal file
20
Question16-Exception/Ex05.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex05 上級 例外処理 - 実在するAPIへの呼び出し]
|
||||
*
|
||||
* 難易度:上級
|
||||
*
|
||||
* TODO:
|
||||
* 1. 関数 callAPI($url) を作成してください。
|
||||
* - $url が有効なURL形式でない場合は、InvalidArgumentException を投げる。
|
||||
* - $url を用いて、実在するAPI(例:"https://jsonplaceholder.typicode.com/todos/1")への GET リクエストを行う。
|
||||
* - API呼び出しに失敗した場合は、RuntimeException を投げる。
|
||||
* - 正常に呼び出せた場合は、APIからのレスポンス(文字列)を返す。
|
||||
*
|
||||
* 2. callAPI() を呼び出す際、try-catch-finally ブロックを使用してください。
|
||||
* - InvalidArgumentException と RuntimeException を個別にキャッチし、エラーメッセージを出力する。
|
||||
* - finally ブロックで「API call attempt finished.」というメッセージを必ず出力する。
|
||||
*
|
||||
*
|
||||
*/
|
||||
133
Question16-Exception/index.html
Normal file
133
Question16-Exception/index.html
Normal file
@@ -0,0 +1,133 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>PHP 例外処理問題 スタートページ</title>
|
||||
<link href="../common/css/bootstrap.min.css" rel="stylesheet">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="page-header">
|
||||
<h1>PHP 例外処理問題 </h1>
|
||||
</div>
|
||||
|
||||
<div class="panel-group" id="accordion">
|
||||
<!-- Ex01: 例外処理基本 (GET: num, den) -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#collapseEx01">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex01: 例外処理基本
|
||||
</a>
|
||||
<small>初級</small>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapseEx01" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<!-- GETフォーム for Ex01.php -->
|
||||
<form method="get" action="Ex01.php" target="_blank" class="form-inline">
|
||||
<div class="form-group">
|
||||
<label for="num">分子 (num):</label>
|
||||
<input type="number" class="form-control" name="num" id="num" value="10">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="den">分母 (den):</label>
|
||||
<input type="number" class="form-control" name="den" id="den" value="2">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">実行</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Ex02: 例外の伝播 (GET: value) -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#collapseEx02">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex02: 例外の伝播
|
||||
</a>
|
||||
<small>初級</small>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapseEx02" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<!-- GETフォーム for Ex02.php -->
|
||||
<form method="get" action="Ex02.php" target="_blank" class="form-inline">
|
||||
<div class="form-group">
|
||||
<label for="value">値 (value):</label>
|
||||
<input type="number" class="form-control" name="value" id="value" value="5">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">実行</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Ex03: 例外キャッチ記述順序修正 (リンクのみ) -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex03.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex03: 例外キャッチの記述順序修正
|
||||
</a>
|
||||
<small>初級</small>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Ex04: カスタム例外とCSV処理 (リンクのみ) -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex04.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex04: カスタム例外とCSV処理
|
||||
</a>
|
||||
<small>中級</small>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Ex05 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#collapseEx05">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex05: API呼び出しの例外処理(現場寄り)
|
||||
</a>
|
||||
<small>上級</small>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapseEx05" class="panel-collapse collapse">
|
||||
<div class="panel-body">
|
||||
<!-- GETフォーム for Ex05.php -->
|
||||
<form method="get" action="Ex05.php" target="_blank" class="form-inline">
|
||||
<div class="form-group">
|
||||
<label for="url">URL:</label>
|
||||
<input type="text" class="form-control" name="url" id="url"
|
||||
value="https://jsonplaceholder.typicode.com/todos/1">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">実行</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="../common/js/jquery-3.2.1.min.js"></script>
|
||||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="../common/js/bootstrap.min"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user