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

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

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

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

Q&A

解決済

4回答

142閲覧

2つの関数を呼び出した後の処理について

enigumalu

総合スコア192

PHP

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

0グッド

0クリップ

投稿2017/06/21 06:04

編集2017/06/21 07:15

API1と2を入力の条件のよって呼び分ける必要があるのですが、1も2も処理後の返却結果が同じため下記のようにAPIの結果を変数に入れ、呼び出した後の処理をまとめたのですがこういった書き方は変でしょうか。
妙案だと思ったのですが書いた後に見ると同じ変数に値を格納しているので微妙かなと考えています。共に更新処理になります。

//呼び出し1 if(substr($req['id'], 0, 3) != 'XXX'){ if($this->is_time_change($req)){ $req["rain_flag"]= 0; } $res = $this->_mountain_sch->update($req); } //呼び出し2 if(substr($req['id'], 0, 3) == 'XXX'){ $req['day_clim_flg'] = 0; $res = $this->_mountain_reg->update($req); } if ($res["result"] === 'success') { $furont_result = array('result' => $res["result"]); } if ($res["result"] === 'fail') { if(!empty($res['over_flag'])){ $furont_result = array('result' => $res["result"] , 'date_info' => $res["info"]); } } return $furont_result;

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

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

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

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

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

m.ts10806

2017/06/21 06:34

if(substr($req['id'], 0, 3) == 'XXX')){  ←閉じかっこが1つ多いですね。転記ミスはなるべくなくしていただければ助かります。
guest

回答4

0

ベストアンサー

別に悪くはないと思いますが、substr が2回、if も2回実行されるので、$id 等に一度退避しておいた方が綺麗になると思います。

php

1 2 $id = substr($req['id'], 0, 3); 3 if ($id != 'XXX') { 4 //呼び出し1 5 if($this->is_time_change($req)){ 6 $req["rain_flag"]= 0; 7 } 8 $res = $this->_mountain_sch->update($req); 9 } else { 10 //呼び出し2 11 $req['day_clim_flg'] = 0; 12 $res = $this->_mountain_reg->update($req); 13 } 14 15 switch ($res["result"]) { 16 case 'success': 17 $furont_result = array('result' => $res["result"]); 18 break; 19 case 'fail': 20 if(!empty($res['over_flag'])){ 21 $furont_result = array('result' => $res["result"] , 'date_info' => $res["info"]); 22 } 23 break; 24 default: 25 throw new Exception('invalid result'); 26 } 27 return $furont_result;

投稿2017/06/21 06:45

mattn

総合スコア5030

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

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

0

2つのメソッドが同時に実行されるようではないので、ifが1回1回切れるのは無駄かなと思います。
いっそのことメソッド名を変数に入れるのはどうでしょうか。
(エラーはありませんが動作自体は未検証です)

PHP

1$updatemethod = "_mountain_"; 2$idstr = substr($req['id'], 0, 3); 3//呼び出し1 4if($idstr != 'XXX'){ 5 if($this->is_time_change($req)){ 6 $req["rain_flag"]= 0; 7 } 8 $updatemethod .= "sch"; 9}else{ 10 //呼び出し2 11 $req['day_clim_flg'] = 0; 12 $updatemethod .= "reg"; 13} 14 15$res = $this->$updatemethod->update($req); 16

返却値の$furont_resultdate_infoがあるかないかだけなのでまとめれそうですが、ひとまず参考まで。

投稿2017/06/21 06:42

編集2017/06/21 07:13
m.ts10806

総合スコア80850

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

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

m.ts10806

2017/06/21 06:47

mattnさんのおっしゃるようにsubstr の結果を一度退避しておいたほうが綺麗ですね・・
guest

0

可読性、今後の修正しやすさなどを考慮するとやめておいた方がいいかもしれません。
やはりそれぞれで処理を明確にした方がよいかと思います。
私なら下記のようにそれぞれ関数化すると思います。
またsubstr($req['id'], 0, 3)の処理が2回以上出てきて冗長です。

PHP

1 if(substr($req['id'], 0, 3) != 'XXX'){ 2 //呼び出し1 3 $furont_result = UpdateMountainSch($req); 4 } else { 5 //呼び出し2 6 $furont_result = UpdateMountainReg($req); 7 } 8 return $furont_result; 9 } 10 11 function UpdateMountainSch($req) 12 { 13 if($this->is_time_change($req)){ 14 $req["rain_flag"]= 0; 15 } 16 $res = $this->_mountain_sch->update($req); 17 18 return ResultCommon($res); 19 } 20 21 function UpdateMountainReg($req) 22 { 23 $req['day_clim_flg'] = 0; 24 $res = $this->_mountain_reg->update($req); 25 26 return ResultCommon($res); 27 } 28 29 function ResultCommon($res) 30 { 31 if ($res["result"] === 'success') { 32 $furont_result = array('result' => $res["result"]); 33 } else { 34 if(!empty($res['over_flag'])){ 35 $furont_result = array('result' => $res["result"] , 'date_info' => $res["info"]); 36 } 37 } 38 return $furont_result; 39 } 40

投稿2017/06/21 06:38

編集2017/06/21 06:53
ttyp03

総合スコア16998

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

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

mattn

2017/06/21 06:46

呼び出し1と呼び出し2は if else の関係にあるべきかと思います。
ttyp03

2017/06/21 06:51

呼び出し1は!=でしたか。気づきませんでした。 それならif文で良いですね。 修正しておきます。 指摘ありがとうございます。
enigumalu

2017/06/23 07:34

ありがとうございます。コーディング規約に近いため実際はこちらを咀嚼した形で利用させていただきました
guest

0

失敗した時の後始末の処理を書くことを考えると、どちらのAPIで失敗したのかという情報を返して欲しいと思います。

質問のコードを使う側にとって、「失敗」と返ってきた時に、「えっと、どっちのAPIを呼び出したんだっけ、、substr($req['id'], 0, 3)の値を求めてっと、、、」というような事を考えないといけないのは負担ですし、バグがあった時に見つけにくいですから。

異なる機能(API)を引数に応じて呼び出しをするような関数ではなく、関数名で明確に区別できる2つの関数として実装するのが素直なように思います。

投稿2017/06/21 07:36

coco_bauer

総合スコア6915

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

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

enigumalu

2017/06/21 10:33

すいませんつまりケースとして if(substr($req['id'], 0, 3) != 'XXX') if(substr($req['id'], 0, 3) == 'XXX') の場合をそれぞれの関数にした方が良いということでしょうか?
coco_bauer

2017/06/22 00:32

そうです。$req(['id'], 0, 3) == 'XXX'という判断で呼び出されるAPIが違うというのは、使う側には(デバッグなどでコードを追う側にとっても)判りにくいので、$req(['id'], 0, 3) == 'XXX'の判断は呼び出す側で行って、2つの関数から呼び出す関数を選ぶほうが良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問