🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

Q&A

解決済

3回答

904閲覧

phpで重複する記述を省きスマートに記述したい

nogimareske

総合スコア23

PHP

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

0グッド

0クリップ

投稿2019/10/13 04:24

編集2019/10/13 06:27

# 質問内容
phpのファンクションを作っています。
作っていて重複が多く無駄を省けないかと考えたのですが、
力不足でよい方法が思い浮かびませんでした。
ご教示いただけると幸いです。

コード

php

1function example($turn, $tokusyuA, $tokusyuB) 2{ 3 if ($tokusyuA == true && $turn == a) { 4 $text = "{$name1}の特殊能力発動!"; 5 $koukaon = "exmple.mp3"; 6 $turn = change_turn($turn); 7 } 8 if ($tokusyuB == true && $turn == b) { 9 $text = "{$name2}の特殊能力発動!"; 10 $koukaon = "exmple.mp3"; 11 $turn = change_turn($turn); 12 } 13 return ($turn); 14}

### コードの説明
プレーヤーAとBがいます。
$turnにはaもしくはbという値が入ります。プレーヤーAのターンのときはaといった具合です。
change_turn($turn)という関数で$turnの値がaだったときはbに切り替え、bだったときはaに切り替えています。
$tokusyuAがtrueでかつ$turnがaのとき、特殊能力を発動させテキストと効果音を関数 kakunou();で格納しています。

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

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

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

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

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

kei344

2019/10/13 04:27

$name1が定義されていません。
jinba

2019/10/13 05:14

「$tokusyuA」「$tokusyuB」は true or false の2パターンのみですか? ($tokusyuA == true && $turn == a) ($tokusyuA == true && $turn == b)←「b]存在する? ($tokusyuA == true && $turn == c)←「c]存在する? 「$turn」は何パターンほど想定されていますか?
nogimareske

2019/10/13 06:04

kei344様 すいません、$name1と$name2はグローバル変数で関数の枠外で定義しています。 jinba様 $turnという変数ですがaとbのみが存在し、change_turn($turn)という関数を呼び出してaとbを毎回切り替えています。説明不足だったかもしれないので本文を修正してみます。
tanishi_a

2019/10/13 06:06

質問文のコードだけ見ると特別無駄が多いようには見えないですが、 どこかパターンが増えていったときのことを心配してるのですかね。 $text = ... の行と $koukaon = ... の行は使ってなさそうなので削除しても良さそうだけど、 きっとこれは疑似コード的なもので、そういう話でも無いんですよね?
nogimareske

2019/10/13 06:15

tanishi_a 様 $text = ... の行と $koukaon = ... グローバル変数でかつ配列でして、元のコードでは配列に値を格納しひとつづつ取り出しています。あまりコードが長くなると読みづらいのではないかと思い重複する部分をある程度削っています。
tanishi_a

2019/10/13 09:19

global $text, $koukaon; みたいな記載も削ったということですね・・。
guest

回答3

0

ベストアンサー

PHP

1function example($turn, $tokusyuA, $tokusyuB) 2{ 3 4 switch( true ){ 5 6 case $tokusyuA == true && $turn == a: 7 $text = "{$name1}の特殊能力発動!"; 8 break; 9 10 case $tokusyuB == true && $turn == b: 11 $text = "{$name2}の特殊能力発動!"; 12 break; 13 14 default: 15 return ($turn); 16 17 } 18 19 $koukaon = "exmple.mp3"; 20 $turn = change_turn($turn); 21 return ($turn); 22}

これでは無駄を省けていませんが
重複部分を削られているとのことですので
重複部分が増えればスマートになる気がします

投稿2019/10/13 06:55

jinba

総合スコア310

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

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

nogimareske

2019/10/13 07:19

回答ありがとうございます。 質問で上げたコードは省略されたものなので重複部分は実際にはもっと多いです。 現時点で重複する記述を減らせそうなので早速試してみたいと思います。 また、switch文で==や&&が使えることを初めて知りました。 今まで見たことあるサンプルコードはどれも case '1': break; case '2': break; のようなものしか見たことがなかったので・・・ 非常に参考になりました。ありがとうございます。
guest

0

要件がよく分かっていないので雰囲気で回答しますが、クラス作ってインスタンス化すると、きれいにできる気がします

投稿2019/10/13 06:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nogimareske

2019/10/13 07:13

回答ありがとうございます。 クラスについてはまだ理解が浅くて関数との使い分けがよくわかっていないので勉強してみようと思います。 ありがとうございました。
guest

0

間違えて回答を致しました。失礼しました。

投稿2019/10/13 04:31

編集2019/10/13 06:14
rinrin1137

総合スコア87

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

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

nogimareske

2019/10/13 06:06

他の方の質問への解答をこちらへ投稿しているのではないかと思います。 ご確認をお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問