前提・実現したいこと
以下の処理を行う関数Fを作っています。
2つの引数(文字列、$xと$yとします。)を用意し、別の関数2つ(AとBとします)を用いてバリデーションを行います。
バリデーションを行う関数は文字列を返し、エラーがなければ空の文字列を。
そうでなければエラーメッセージを返します。
そこで、2つの関数が共に空の文字列を返せば2つの値を結合した値を空文字列の入った変数($aとします)に上書きして格納します。
また、バリデーションを行う関数を変数($bと$cとします)に格納して最終的に$aと$bと$cをcompact関数でまとめてreturnします。
発生している問題・エラーメッセージ
Noticeを含みエラーは出ていないのですが、上書きをしていないローカル変数の値が
if文の後に突然消えてしまいました。
尚、値は入れていないのでどちらも"入力されていません。"と出るのが正しいです。
該当のソースコード
PHP
1 2function A($x) 3{ 4 $error=""; 5 if (!isset($x)) { 6 $error = "<p style=\"color:#ff2800;\">"."入力されていません。"."</p>"; 7 } elseif ((intval($x)<0||intval($x)>10)&&!ctype_digit($x)) { 8 $error = "<p style=\"color:#ff2800;\">"."不正なPOSTです。"."</p>"; 9 } 10 return $error; 11} 12 13function B($y) 14{ 15 $error=""; 16 if (!isset($y)) { 17 $error = "<p style=\"color:#ff2800;\">"."入力されていません。"."</p>"; 18 } elseif ((intval($y)<0||intval($y)>9)&&!ctype_digit($y)) { 19 $error = "<p style=\"color:#ff2800;\">"."不正なPOSTです。"."</p>"; 20 } 21 return $error; 22} 23 24function F($x,$y) 25{ 26 $a =""; 27 $b=A($x); 28 $c=B($y); 29 echo var_dump($b,$c); 30//"入力されていません。" "入力されていません。" 31 if (($b="")&&($c="")) { 32 $a = $x.$y; 33 } 34 echo var_dump($b,$c); 35//"" "入力されていません。" 36 return compact('a','b','c'); 37 } 38$x=""; 39$y=""; 40array_r(F($x,$y))//Array ( [a] => [b] => [c] =>入力されていません。
補足情報(FW/ツールのバージョンなど)
フレームワークは不使用。PHPは最新版です
回答2件
あなたの回答
tips
プレビュー