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

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

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

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

Q&A

解決済

2回答

1649閲覧

if(in_array($str, array(a,b,c))) か if($str == a || $str == b || $str == c) か

t_hoshizaki

総合スコア18

PHP

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

0グッド

1クリップ

投稿2016/07/20 04:53

###前提
CakePHP2.xで、ボタンを押したときに呼び出される関数内でのことです。
チーム内でコードの書き方を統一していく指標を探っています。

###疑問の内容
if文を使用して実行内容を分岐するとき、次の2パターンのうちどちらが適切なのでしょうか?
「実行速度」「可読性」といった点からお答えいただけると助かります。

//両パターン共通の定数, 変数 define('DEFINE_ONE', 1); define('DEFINE_TWO', 2); define('DEFINE_THREE', 3); define('DEFINE_FOUR', 4); $str['Model']['key'] = 'test_string'; //パターン1 if(in_array($str['Model']['key']), array(DEFINE_ONE, DEFINE_TWO, DEFINE_THREE, DEFINE_FOUR)){ //処理内容略 } //パターン2 if($str['Model']['key'] == DEFINE_ONE || $str['Model']['key'] == DEFINE_TWO || $str['Model']['key'] == DEFINE_THREE || $str['Model']['key'] == DEFINE_FOUR){ //処理内容略 }

###補足
定数名は大体上記のような文字数です。in_arrayの第一引数はCakePHPを使用しているので、上記のように配列の形になります。

新しく入ってきたメンバーに、if文の中身が長くなるので、パターン2ではなく1の書き方でコーディングしてもいいかと聞かれたのですが、私は「in_arrayの速度や挙動に不安がある」「コードの長さがそんなに変わらない」「パターン2の方が見やすい」ことからパターン2でよいのではないかと考えています。

より適切なコーディングのために回答していただけると助かります。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

条件の数にもよるでしょうが、個人的には判定を関数にして
if文ではそれを呼び出すようにするのが好みかなあ。
関数を使わないならswitch文使うと思う。

投稿2016/07/20 05:25

takasima20

総合スコア7458

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

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

t_hoshizaki

2016/07/21 02:57

回答ありがとうございます。 条件の数は大体4~6個です。 「条件文が横に伸びて読みづらい」や「条件を羅列していてコードが読みにくい」といったことから今回の質問をさせていただいていたので、今回頂いた関数という新しい提案を次の機会にしてみようと思います。 なお、switch文はチーム内ではパターン2に分類されています。
guest

0

定数とマッチさせるときはビット計算するほうが多いのでは?

PHP

1<?PHP 2define('DEFINE_ONE', 1); 3define('DEFINE_TWO', 2); 4define('DEFINE_THREE',3); 5define('DEFINE_FOUR', 4); 6$def_all=(pow(2,DEFINE_ONE -1)| pow(2,DEFINE_TWO-1)| pow(2,DEFINE_THREE-1) | pow(2,DEFINE_FOUR-1)); 7$num=3; 8print $def_all & pow(2,$num-1); 9$num=4; 10print $def_all & pow(2,$num-1); 11$num=5; 12print $def_all & pow(2,$num-1); 13?>

最初からDEFINE_ALL的な定数を用意してもいいかもしれないですね。

投稿2016/07/20 08:27

yambejp

総合スコア114767

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

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

t_hoshizaki

2016/07/21 03:01

回答ありがとうございます。 ビット計算をするというチーム内では出なかった新しい案に驚いています。 ただチーム内にプログラミング初心者が入る可能性があるので関数や、提案頂いたDEFINE_ALLの案を検討していこうと思います。
yambejp

2016/07/21 03:11

もしビット処理する場合は define('DEFINE_ONE', 1); define('DEFINE_TWO', 2); define('DEFINE_THREE,4); define('DEFINE_FOUR,8); $def_all=DEFINE_ONE| DEFINE_TWO| DEFINE_THREE|DEFINE_FOUR; とビット刻みで元の定数を用意したほうが感覚的にはわかりやすいかもしれません また最初から要素数がきまっていればALLは define('DEFINE_ALL,15); としてもいいですし、上限を設定し define('DEFINE_ALL,1023); など余裕をみておいてもよいでしょう。
t_hoshizaki

2016/07/21 04:05

更なる回答ありがとうございます。 具体的に書いていただいたのでより理解できました。 チーム内での導入はまだ難しいかもしれませんが、個人的に制作しているプログラムで使用してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問