質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1204閲覧

PHPで無効な数字や文字列の場合に例外処理を出したいです。

Mason

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/10/02 09:12

編集2021/10/02 09:40

前提・実現したいこと

現在PHPで問題を解いています。
十二支を文字列で返す関数を作るところまでは出来ました。
これを無効な数字や文字列の場合には例外処理を出したいです。
ご教授お願い致します。

該当のソースコード

PHP

1//例外処理出したい 2<?php 3 4function eto($seireki){ 5 $list12 = array("申","酉","戌","亥","子","丑","寅","卯","辰","巳","午","未"); 6 7 $num12 = $seireki - floor(($seireki /12)) * 12; 8 9 $zyunishi = $list12[$num12]; 10 11 return $zyunishi; 12} 13 14print_r(eto(1993)); 15?> 16 17//実行結果 "酉"

試したこと

PHP

1<?php 2function eto($seireki) 3{ 4 try { 5 $list12 = array("申", "酉", "戌", "亥", "子", "丑", "寅", "卯", "辰", "巳", "午", "未"); 6 7 $num12 = $seireki - floor(($seireki / 12)) * 12; 8 9 $zyunishi = $list12[$num12]; 10 if(is_string($zyunishi)){ 11 12 throw new Exception('無効な数字'); 13 } 14 return $zyunishi; 15 16 print_r(eto(1993)); 17 18 } catch (Exception $e) { 19 20 echo "例外処理が発生しました"; 21 echo "\n"; 22 echo $e->getMessage(); 23 24 } 25} 26?>

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/10/02 09:20

現状の問題は何ですか? if(is_int($zyunishi)){ だと数値の時にthrowしてるように見えますが、 これは要件通りの実装ですか?
Mason

2021/10/02 09:35

現状の問題は、何も表示されないことです。 is_stringにし整数の時にthrowしたりしてみましたがうまくじっこうできないです。 要件は、これを無効な数字や文字列の場合には例外処理を出したいです。
m.ts10806

2021/10/02 09:37

>現状の問題は、何も表示されないことです。 「試したこと」のコードだとeti()は誰からも呼ばれてませんし、 returnのあとに書いてあるprint_rは実行されることがないですし、関数名etoになってます。
Mason

2021/10/02 09:43

すいません。もう少し詳しくお願い致します。
m.ts10806

2021/10/02 09:46

回答にうつしました。
guest

回答1

0

PHP

1<?php 2function eti($seireki) //呼び出されてない 3{ 4 try { 5 $list12 = array("申", "酉", "戌", "亥", "子", "丑", "寅", "卯", "辰", "巳", "午", "未"); 6 7 $num12 = $seireki - floor(($seireki / 12)) * 12; 8 9 $zyunishi = $list12[$num12]; 10 if(is_string($zyunishi)){ //$zyunishiが干支返すなら必ず文字列になるのでは? 11 12 throw new Exception('無効な数字'); 13 } 14 return $zyunishi; 15 16 print_r(eto(1993)); // returnで関数が終了するのでここは通らない行。それにeto()になってる 17 18 } catch (Exception $e) { 19 20 echo "例外処理が発生しました"; 21 echo "\n"; 22 echo $e->getMessage(); 23 24 } 25} 26 27//↓に書けばとりあえず実行はされるが 28print_r(eto(1993)); 29?> 30

「何が無効なのか」をきちんと定義されたほうが良いと思います。
「文字列かどうか」をチェックしたいなら$zyunishiではなく$seirekiをチェックすべきです。
$seirekiが「年数としてありえない」なら、checkdate関数する必要があるでしょうしね。
引数の型宣言も有効かもしれません。(TypeError

つまり、バリデーションするならもっと前。
関数の引数をチェックすること。

投稿2021/10/02 09:42

編集2021/10/02 09:52
m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問