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

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

詳細はこちら
PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

5回答

6890閲覧

PHPの関数でechoよりreturnを使うメリットはなんですか?

kurenyan

総合スコア6

PHP

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

1グッド

1クリップ

投稿2019/11/27 07:53

<?php function getCircleArea($radius){ echo $radius * $radius * 3; } getCircleArea(5); //結果は75 ?>

に対して

<?php function getCircleArea($radius){ return $radius * $radius * 3; } $circleArea=getCircleArea(5); echo $circleArea; ?>

とするメリットなんですか?

上のコードのほうが行数がすくなくてスッキリしていると思いますが?

プログラミング初心者でレベルの低い質問ですみませんが、回答よろしくおねがいします

_kaede👍を押しています

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

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

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

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

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

guest

回答5

0

上のコードのほうが行数がすくなくてスッキリしていると思いますが?

上の関数では、値はechoされてしまうので、他のコードで再利用することができません(無理やりできなくはないですが、返り値にしたほうが圧倒的に便利です)。

ある程度以上大きなプログラムになると、ブラウザへの出力は限られた場所で行うようになるので、「直接echoする関数」は、逆に出番がなくなります。

投稿2019/11/27 07:58

maisumakun

総合スコア145971

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

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

m.ts10806

2019/11/27 08:13

むかしはよくありましたね。 「getHeader」という名のDOCTYPE宣言からbodyタグまでをechoする関数。 WordPress 君のことだ。(ディスってるわけではない)
guest

0

関数内でechoをしてしまうとその場で終わりです。
returnすることにより、処理結果を別の処理で使いたいときに有用となります。

提示の例では極論過ぎて「こっちが良い」と一概には言えません。要件次第です。
ただ、汎用性の面から考えるとどうでしょうか?

なかなか「単にechoして終わり」という関数は実用に乏しいのでないです。Exceptionを拾ってシステムエラーで終わりとするのであればechoで良いしそのままdie()でも良いでしょう。

関数化の大目的は「役割分担」です。
例示のコードでは「getCircleArea」と名前がつけられています。
渡された引数で一定の計算を行うようになっていますね。
そこでechoまでしてしまったら「get」という名称から期待する動作になってないと思いませんか?

つまり「要件次第」というのは「その機能にどこまでの役割を与えるか」ということになります。
それによって関数名であったり引数であったり、内部の処理が決まるわけです。
「単にコードが短くなるから」という理由だけでreturnの有無は決められません。

投稿2019/11/27 08:03

m.ts10806

総合スコア80875

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

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

m.ts10806

2019/11/27 08:28 編集

はい。あえて、出しました。 getじゃないの?と今でも違和感あります。 そもそもPHPも引数の順番が統一されてなかったりとりあえずつけといたような名前が今でも使われてる関数もあるので仕方ないと言えば仕方ないですけどね
guest

0

ベストアンサー

  • returnを使うメリットの一つは、コードを読む時に関数の中で行われている処理を気にしなくてすむことです。
  • 例えばあなたが次のようなコードを書いたとします(質問の1番目に書かれたコードと同じです)。

php

1function getCircleArea($radius){ 2 echo $radius * $radius * 3; 3} 4 5getCircleArea(5);
  • このコードを他の人(または半年後のあなた)が読む時、その人はまずgetCircleArea(5);の行しか見ていません。そして実行して驚きます。「おい、勝手に出力されたぞ」と。
  • もしこれがこう書かれていたらどうでしょう(質問の2番目のコードとほぼ同じです)。

php

1function getCircleArea($radius){ 2 return $radius * $radius * 3; 3} 4 5echo getCircleArea(5);
  • 実行結果に違いはありませんが、echo getCircleArea(5);の行だけ見ても実行結果が予想しやすくなっています。

  • returnを使うもう一つのメリットは、関数を別の用途に再利用できることです。
  • もしあなたが円柱の体積を求めたくなった時、下のコードのようにgetCircleArea()のreturnを使って計算することができます。

php

1function getCircleArea($radius){ 2 return $radius * $radius * 3; 3} 4 5function getCylinderVolume($circle_area, $height) { 6 return $circle_area * $height 7} 8 9$circle_area = getCircleArea(5); 10echo $getCylinderVolume($circle_area, 10); 11// 実行してないので、バグがあったらすいません

投稿2019/11/27 08:07

hideki_nakajima

総合スコア44

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

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

m.ts10806

2019/11/27 08:10

>このコードを他の人(または半年後のあなた)が読む時、その人はまず これ大事ですね。 3日見なければ他人のコード
guest

0

ユーザー定義関数は単目的な方が使い勝手が良いです
「getCircleArea」というように「CircleArea」を「get」する
関数なわけですから、echoするのは目的外だと思います

投稿2019/11/27 08:01

yambejp

総合スコア116688

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

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

0

echo と return ではやりたいことが全く違います。

あと関数の中身が全く違います。


1.計算結果をただ出力するだけの関数

PHP

1function getCircleArea($radius){ 2 echo $radius * $radius * 3; 3}

2.計算した結果を取得して、戻り値として返却する関数

PHP

1function getCircleArea($radius){ 2 return $radius * $radius * 3; 3}

1は計算結果の使いまわしが効かず、2は計算結果を使ってさらにできることの幅を広げることができます。

投稿2019/11/27 08:04

azuapricot

総合スコア2341

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

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

m.ts10806

2019/11/27 08:08

よし引数に&をつけよう。(初心者を底無し沼に引き込む発言)
azuapricot

2019/11/27 08:10

ヤメタゲテー!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問