• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:functionについて)

functionについて

このQ&Aのポイント
  • htmlのフォームから時間を入力して、その値に”時~”をつけてmysqlに登録したい
  • 普通に値を代入すると登録されるが、function関数を使用すると値が入力されない
  • 何が悪いのかを教えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • kabinett
  • ベストアンサー率60% (9/15)
回答No.3

No.2へのお礼内の質問に対しての回答です。 $aaaへ"時~"を代入し、それを関数の外でも使おうとするため、参照渡しが必要になります。 値渡しの場合呼び出し元の変数から関数の引数へ値が代入されて渡されます。 関数を使わないとするとwork_time ($mon0,"mon0")の部分は $aaa=$mon0; $bbb="mon0"; $aaa = $_POST[$bbb]; if ($aaa != ""){ $aaa .="時~"; } このような構文と等価になります。 これ以降で$mon0を使ったとしても、"時~"が追加されてるのは$aaaなので、値が変更されていないことになります。 一方参照を使った場合のwork_time ($mon0,"mon0")の部分は $bbb="mon0"; //$bbbは参照を使わないとする $mon0 = $_POST[$bbb]; if ($mon0 != ""){ $mon0 .="時~"; } と等価の構文になります。関数内で名前が$aaaになっていますが、使われるのは$mon0の内容なので$mon0が変更され以降の行で$mon0を使った場合にも変更された値が使用できます。 また、上の文では$bbbは参照渡しにしていないので値が代入されていますが、関数内で$bbbの内容を変更していないので問題ありません。 参照渡しで呼び出し元の変数の値を変更できる利点は、関数で呼び出し元の変数の値を変更されてしまうという欠点もあるので、使用する場合には注意してください。 (今回の例であれば、関数呼び出し前に$mon0に入っていた内容は、関数内で上書きされて消えます) 例示の文にあんまり変更を加えずに回答しようとしてしまったため参照渡しで回答しましたが、実際私が自分で書く場合であれば、$aaaの値を戻り値で戻すように書きます。関数を function work_time($bbb){ $aaa = $_POST[$bbb]; if ($aaa != "") { $aaa .="時~"; } return $aaa; } として、使うときは、 $mon0 = work_time("mon0"); とします。 戻り値を使ったほうがどこで$mon0を変更してるか分かりやすくなると思います。

noname#19843
質問者

お礼

kabinett 様 迅速な回答と丁寧な返答有難う御座いました。<(_ _)> とても勉強になりました! 機会がありましたら、またよろしくお願いいたします。

その他の回答 (2)

  • kabinett
  • ベストアンサー率60% (9/15)
回答No.2

引数が値渡しになっているため、呼び出し元の変数(この場合は$mon0)の値は変更されません。 Function側で呼び出し元の変数の値を変更したい場合は、引数を参照渡しにしましょう。 function work_time (&$aaa,$bbb){ //$aaaの前に&を追加 $aaa = $_POST[$bbb]; if ($aaa != ""){ $aaa .="時~"; } } work_time ($mon0,"mon0"); //こっちは変わらない

参考URL:
 
noname#19843
質問者

お礼

kabinett 様 有難う御座いました。 今回は、$aaaに”時~”を代入しているから、 参照渡しにしないと駄目と言う事でしょうか?

noname#86752
noname#86752
回答No.1

これでどうでしょう? function work_time($bbb){ $aaa = $_POST[$bbb]; if ($aaa != "") { $aaa .="時~"; } } work_time("mon0");

noname#19843
質問者

補足

この場合は、どこで$aaaに値を代入するのでしょうか?

関連するQ&A