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

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

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

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

Q&A

解決済

5回答

2415閲覧

【PHP】メソッドの切り分け方

tomoyuki123

総合スコア273

PHP

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

1グッド

2クリップ

投稿2017/03/17 02:32

編集2017/03/17 02:36

たとえば苗字と名前を取得するメソッドを作成するとして
こういう風に書く人がいるんですが

PHP

1public function getName($type) 2{ 3 // 共通処理 4 5 if($type == "first") { 6 // 独自処理 7 } elseif($type == "last") { 8 // 独自処理 9 } 10}

私はいつもこんなかんじで書いてます。
共通処理は必要ならprivateに切り出して、場合によっては同じコード書いてます。

PHP

1public function getFirstName() 2{ 3 // 共通処理 4 5 // 独自処理 6} 7 8public function getLastName() 9{ 10 // 共通処理 11 12 // 独自処理 13}

ケースバイケースだと思いますが、普通はどういうかんじで切り分けるのでしょうか?
さっき共通化されてなくないですか?って言われてなんだかよくわからなくなったので。

yodel👍を押しています

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

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

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

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

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

kei344

2017/03/17 02:34

1箇所「pubilic」になっていますよ。
tomoyuki123

2017/03/17 02:36

失礼しました。修正させていただきました。
退会済みユーザー

退会済みユーザー

2017/03/17 02:44

複数人開発なら、PSRなどとは別の命名規約で縛っとかないといけないんじゃない?
guest

回答5

0

共通処理をメソッド化すればどちらも大差ないと思います。
また、私は拡張やデバッグを考えると質問者のコードの方がいいかなと思います。
ただ、個人的な考えよりは組織や開発チームの方針に従った方がいいですね。そのため、開発の技術リーダーに確認した方がいいですね。

投稿2017/03/17 02:57

yona

総合スコア18155

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

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

0

呼び出し側としては後者のほうがいいかな。引数がfirst なのか First なのか FIRST なのかで迷いたくないです。Enumあればまだマシですが。
共通化するにしてもこうして欲しい。

protected function getName($type) { if($type == "first") { // 独自処理 } elseif($type == "last") { // 独自処理 } } public function getFirstName() { return $this->getName('first'); } public function getLastName() { return $this->getName('last'); }

投稿2017/03/17 03:23

kodai

総合スコア759

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

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

0

ベストアンサー

コーディングルールがあればそれに従い、それがなければ実装者の自由。
というのが、現実かなと思っています。
改修の場合は、ソースの記述レベルに合わせるのが一般的だと思います。

ただ、共通化を目指す理由は、
①似たような処理でファイルがどんどん肥大化する
②共通部分で手直しが入ると、修正箇所が多くてえらいことになる(呼び出し口が変わるともう・・・)
という残念な結果を回避するのが理由となります。

投稿2017/03/17 02:55

raichi

総合スコア278

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

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

tomoyuki123

2017/03/17 03:22

皆様ありがとうございました!大差なさそうなのと、特にルールとかなく空気読みながら開発してるのでとりあえず言われた通りやります!
guest

0

BAが決定しているようですが、なんとなく書き込みます。

私は、後者のコードを推します。

前者のコードの$typeの値は、メソッドの中身を知っていないと利用出来ないからです。
メソッドを作る目的の一つには実装を隠すと言う点があるので、よくないと判断します。

また、$typeの中身は文字列なので、呼び出すたびに文字列を作成し、比較するので遅いです。
影響するほど多様しないかもしれませんが、「文字列を使わない場合と比べて100倍以上は遅くなるのでは?」と思いなんとなーく嫌なコードです。

後者は、タイプミスの場合、エディタで指摘が出るのでよい書き方だと思います。
ただし、共通処理は関数を作るべきでしょう。

だたし、名字と名前は関連性がかなり強いので、人物クラスなどクラスを定義した方が共通処理の関数も含めた収まりがよいように思われます。

投稿2017/03/21 15:18

iwamoto_takaaki

総合スコア2883

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

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

0

どちらでも大差ないと思いますが、あえて言えば

前者は存在しないtypeへの対応が必要なので微妙だが、逆に拡張し易い
また関数の戻り値の型は揃えたほうがよいので
type毎の戻り値を一緒のものにしないと整合性がとれない
(もちろん別の型を返してもいいっちゃいいんですが・・・)

後者は一対一で関数と紐付けられるので直感的でよいが
不特定多数のものに対して対応がしづらい
また同じような処理なのにまとまりがないので管理しづらいかも

投稿2017/03/17 02:50

yambejp

総合スコア114581

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問