![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
現在htmlのフォームから、時間を入力して、その値に”時~”をつけて
9時~と言うような、感じでmysqlに登録したいのですが、
php5.0.4にて下記のように普通に値を代入すると、登録されるのですが、
これをfunction関数を使用すると、値が入力されません。
何が悪いのでしょうか?よろしくお願いいたします。
$mon0 = $_POST['mon0'];
if ($mon0 != ""){
$mon0 .="時~";
}
function work_time ($aaa,$bbb){
$aaa = $_POST[$bbb];
if ($aaa != ""){
$aaa .="時~";
}
}
work_time ($mon0,"mon0");
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を変更してるか分かりやすくなると思います。
kabinett 様
迅速な回答と丁寧な返答有難う御座いました。<(_ _)>
とても勉強になりました!
機会がありましたら、またよろしくお願いいたします。
No.2
- 回答日時:
引数が値渡しになっているため、呼び出し元の変数(この場合は$mon0)の値は変更されません。
Function側で呼び出し元の変数の値を変更したい場合は、引数を参照渡しにしましょう。
function work_time (&$aaa,$bbb){ //$aaaの前に&を追加
$aaa = $_POST[$bbb];
if ($aaa != ""){
$aaa .="時~";
}
}
work_time ($mon0,"mon0"); //こっちは変わらない
kabinett 様
有難う御座いました。
今回は、$aaaに”時~”を代入しているから、
参照渡しにしないと駄目と言う事でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- フランス語 下記のフランス語の英訳は文法的に合っていますか? J’ai donné à mon père le 1 2023/06/25 19:21
- JavaScript JavaScript?jQuery?で書き方を教えてください。 初心者です。 AAAという要素をステ 2 2023/08/04 22:09
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP8を使うと、大量のWarningが...
-
「ログイン機能を持たせる」説...
-
プログラミング言語で、使える...
-
PHPで訪問回数を表示するカウン...
-
PHPの構文で間違えが分からない
-
オススメのプログラミングスク...
-
reuterの記事をbeautiful.soup....
-
アマゾンのような評価の星を選...
-
PHPのセッション有効期限について
-
PHPで画像の渡しが上手く行きま...
-
配列の値の更新方法について
-
php に関して質問です。 各ユー...
-
ワードプレスサイト PHP8.0.25...
-
php 確認表示画面で値をSESSION...
-
空文字 "" ですが 空文字の意味...
-
if (!empty($_POST) ){ // フォ...
-
こちらはただの直列処理ですか?
-
PHPでこのコード自体に意味は無...
-
PHPとHTML+Xamppの掲示板で画像...
-
これの対応OSを教えて下さい。p...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数時間情報の重複を求める
-
@以降のapu.ac.jpのapuって??
-
お世話になっております。
-
こういう問題分をよんだとき
-
簡単にEXEファイルを作れるプロ...
-
ftpコマンドの戻り値をチェック...
-
VB6にて、テキストファイルの内...
-
マイナポータルの住宅借入金当...
-
apacheで他のPCから見えない場...
-
JCL(富士通/MSP)について教...
-
秀丸エディタでのファイル分割
-
画像ファイル名をリストに基づ...
-
HTMLでファビコンを変更したいです
-
ファイルと同名のフォルダを作成
-
exeファイルの編集
-
Subversion Eclipse Subversive...
-
ファイル名を変更前の名前に戻す方
-
Edius(エディウス)で2つのプロ...
-
warファイル 「種類:WAR ファ...
-
ランレングス法を用いたC言語解...
おすすめ情報