前提・実現したいこと
phpのみで動く電卓を作成しています。
機能としては、一般的な電卓の計算機能と、演算子を入力したら、その演算子を表示させる(例:5+10=15の時なら、+を入力したら次の10の1を入力するまで、表示したままにする。)
ソースコード
<?php //変数設定 $f_num = $_POST['f_num']; $s_num = $_POST['s_num']; $input_num = $_POST['input_num']; $ope = $_POST['ope']; $button = $_POST['button']; $s_button = $_POST['s_button']; if (isNumBtn($button) || empty($button)) { if (isOpeBtn($s_button)) { $s_num = $f_num; if (preg_match('/./', $button)) { $f_num = '0.'; } else { $f_num = $button; } } else { $f_num = $f_num . $button; } $input_num = $f_num; } else { switch ($button) { case 'C': $f_num = ''; $s_num = ''; $input_num = ''; $ope = ''; break; case '+/-': $f_num = -$f_num; break; case '%': $f_num = $f_num / 100; break; default: if (!empty($s_num) && (preg_match('/=/', $button) || (isOpeBtn($button) && isNumBtn($s_button)))) { switch ($ope) { case '+': $f_num = $s_num + $f_num; break; case '−': $f_num = $s_num - $f_num; break; case '✕': $f_num = $s_num * $f_num; break; case '÷': $f_num = $s_num / $f_num; break; default: break; } } $s_num = $input_num; $ope = $button == '=' ? $ope : $button; break; } } $s_button = $button; function convertDispNum($num) { preg_match('/(-?)(\d+)(.?\d*)/', $num, $matches); return $matches[1] . number_format($matches[2]) . $matches[3]; } function isOpeBtn($btn) { return preg_match('/(+|−|✕|÷)/', $btn); } function isNumBtn($btn) { return preg_match('/(\d|.)/', $btn); } ?> <!DOCTYPE html> <meta charset="UTF-8"> <html> <head> <title>電卓</title> </head> <body> <h2>Calculator</h2> </p><?php echo $f_num, $ope ?></p> <form action="?" method="post"> <input type="hidden" name="f_num" value="<?php echo $f_num; ?>" /> <input type="hidden" name="s_num" value="<?php echo $s_num; ?>" /> <input type="hidden" name="input_num" value="<?php echo $input_num; ?>" /> <input type="hidden" name="s_button" value="<?php echo $s_button; ?>" /> <input type="hidden" name="ope" value="<?php echo $ope; ?>" /> <table> <tr> <td><button type="submit" name="button" value="C">C</button></td> <td><button type="submit" name="button" value="+/-">+/-</button></td> <td><button type="submit" name="button" value="%">%</button></td> <td><button type="submit" name="button" value="÷">÷</button></td> </tr> <tr> <td><button type="submit" name="button" value="7">7</button></td> <td><button type="submit" name="button" value="8">8</button></td> <td><button type="submit" name="button" value="9">9</button></td> <td><button type="submit" name="button" value="✕">✕</button></td> </tr> <tr> <td><button type="submit" name="button" value="4">4</button></td> <td><button type="submit" name="button" value="5">5</button></td> <td><button type="submit" name="button" value="6">6</button></td> <td><button type="submit" name="button" value="−">−</button></td> </tr> <tr> <td><button type="submit" name="button" value="1">1</button></td> <td><button type="submit" name="button" value="2">2</button></td> <td><button type="submit" name="button" value="3">3</button></td> <td><button type="submit" name="button" value="+">+</button></td> </tr> <tr> <td colspan="2"><button type="submit" name="button" value="0">0</button></td> <td><button type="submit" name="button" value=".">.</button></td> <td><button type="submit" name="button" value="=">=</button></td> </tr> </form> </body> </html> ``````````````````````````````````````````````````````````````````````````` ### 質問内容 以上のソースコードだと、演算子がずっと残ったままになってしまいますが、上記の処理をさせたい場合、どのようにすればよろしいでしょうか。
コードはマークダウンの機能を利用してご提示ください
https://teratail.com/help#about-markdown
電卓くらいならJavaScriptだけのほうが簡潔にできると思いますが、何かしらの課題でしょうか。
新人研修用のphpの課題で、phpのみの使用になります。
なるほど。ではコードのマークダウン対応はしてもらうとして、デバッグについては教えてもらってますか?
おそらく答えだけ渡してもためになりませんので解決のプロセスのみのアドバイスの方が良さそうです
あ、念のためphpのバージョンも追記してもらえますか?
新人研修用なら担当の人に質問すればいいのではないですか?
本番の仕事に答えなんてありませんよ。
現在IntelliJのデバッグ機能は教えていただいていて、それを使いながらという形になります
では起きている問題に対してデバッグした結果も記載してもらえればと。
地道ですがvar_dump()なども一般的で有効なデバッグ手段です。
https://junpeko.com/debug/
mts10806様
今回質問したのが、バグが発生しているためではなく、単純に機能改善のための質問のため、処理自体は現在はうまく行われております。
stdio様
ここは質問できる場所ですよね?
質問に対する有益な回答をぜひお願いしますね。
少しは考えて下さい。どこかに答えのあるような質問にまともに答える意味が果たしてあるのだろうかと?機能の改善したいならまず思い当るところをすべてやってから質問して来て下さい。
描画のしているであろう部分の更新を演算子が入力された時は更新しないようにするとか、方法はいくらでもあるはずです。
stdio様
あなたがまともに答える意味がないと思うなら、無視されて結構ですよ
私があなたに直接お願いしてるわけではないので、どうぞお引取りください。
stdioさんの言い方はあれですけど「どこまで考えて何を試したかこの内容では伝わらないよ」ということだと思います。
それはそれで前向きに捉えて受け取っても良いのではないでしょうか。
現在の内容だと的確なアドバイスが得られにくいのは確かですし、機能改善のためおっしゃってはいますが、実際に「演算子が出続ける」という仕様、設計ではないのでしたら、それは一般的な電卓からすると期待する挙動ではないのでバグです。
回答3件
あなたの回答
tips
プレビュー