![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
phpを勉強しています。可変関数というものがあることを知り、試しに動かしてみました。
そのときに疑問になったことがあります。
可変関数は使わずに、関数内で変数に値を格納し直してreturnで値を戻せば同じことができるのでは?と思いやってみましたが変数に格納されている値が変わりませんでした。
この原因が分かれば教えて頂きたいです。
また、値渡ししたものは関数内で値を変えても影響がない、ということだけ知っていて、
その原因について詳しく知っていなくても問題はでないでしょうか。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>可変関数</title>
</head>
<body>
<?php
/*可変関数を使わない場合*/
function kahen_off_1($kf1) {
$kf1 = "A<br>";
}
function kahen_off_2($kf2) {
$kf2 = "B<br>";
}
$kahen_off = "default<br>";
echo $kahen_off; //default
kahen_off_1($kahen_off);
echo $kahen_off; //default
kahen_off_2($kahen_off);
echo $kahen_off; //default
echo "<br>";
/*可変関数を使う場合*/
function kahen_on_1($kn1) {
$kn1 = "A<br>";
}
function kahen_on_2($kn2) {
$kn2 = "B<br>";
}
$kahen_on = "default<br>";
echo $kahen_on; //default
kahen_on_1(&$kahen_on);
echo $kahen_on; //A
kahen_on_2(&$kahen_on);
echo $kahen_on; //B
echo "<br>";
/*returnでやる場合*/
function kahen_return_1($kr1) {
$kr1 = "A<br>";
return $kr1;
}
function kahen_return_2($kr2) {
$kr2 = "B<br>";
return $kr2;
}
$kahen_return = "default<br>";
echo $kahen_return; //default
echo kahen_return_1($kahen_return); //default
echo kahen_on_2($kahen_return); //default
?>
</body>
</html>
No.2ベストアンサー
- 回答日時:
ANo.1です。
失礼。可変変数でなく可変関数ですね(汗それでも、どう読んでも「変数名が可変」であることを意識したソースには読めません。可変関数として使うなら
/* function内でecho */
function kahen_on_1() {
echo "A<br />";
}
function kahen_on_2() {
echo "B<br />";
}
$kahen_on = "kahen_on_1";
$kahen_on();
$kahen_on = "kahen_on_2";
$kahen_on();
print "<hr />";
/* returnでやる場合 */
function kahen_return_1() {
return "A<br />";
}
function kahen_return_2() {
return "B<br />";
}
$kahen_return = "kahen_return_1";
echo $kahen_return();
$kahen_return = "kahen_return_2";
echo $kahen_return();
ですよね(変数名のあとに括弧が付くことによって変数の値を関数名として使う)。
No.1
- 回答日時:
>関数内で変数に値を格納し直してreturnで値を戻せば同じことができるのでは?
>と思いやってみましたが変数に格納されている値が変わりませんでした。
デフォルトは「値渡し」です。関数内で変更した値を戻したければ「参照渡し」にしてください。
RTFM.
http://www.php.net/manual/ja/functions.arguments …
というか、提示されたソースは「値渡しと参照渡しのテストスクリプト」にしか読めません。どこにも「可変変数」が出てきていません。「可変変数」は以下のようなものを指すのですが、それは理解されていますよね?
<?php
$var1 = 'aaa';
$var2 = 'bbb';
$var = 'var1';
print $$var . '<br />';
$var = 'var2';
print $$var . '<br />';
http://www.php.net/manual/ja/language.variables. …
可変変数は「そういうものがある」程度に覚えておけば、使う機会に遭遇したときに使えばいいと思います。でも関数の引数の扱いについてはよく理解しておいてください。標準関数でも処理結果を戻り値で戻すものと渡した変数を書き替えて戻す(戻り値は真偽値だけだったり処理件数だったり)ものとありますよが、しばしば混同される方がいらっしゃいますので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP php ログイン 1 2022/11/01 00:24
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- PHP PHP MySql ページング 2 2022/09/20 06:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイルでpingの結果を...
-
switch()文で値の大小比較
-
Dosブロンプトでtabを出力したい
-
phpでcookieがうまく保存されない
-
文字化け(Shift-jis→UTF-8変換...
-
PHPで日付の入力内容をチェック...
-
phpにおいて$xを計算式の文字列...
-
PHP 四則演算について
-
findstrのerrorlevel
-
ページ表示ごとにカウントダウ...
-
1行でかくIF文が作用しない
-
私の考えがそもそも、間違って...
-
Windowsのsetコマンドでの小数...
-
カレンダーについて教えてくだ...
-
文字列から期間算出 09-12 12-12
-
webで一円と五円と十円の枚数を...
-
オブジェクトの中身の判定(PHP)
-
'2/1'を'02/01'に変換 (修正版)
-
可変関数について。また、どこ...
-
shシェルスクリプト 空白行の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
バッチファイルでpingの結果を...
-
shシェルスクリプト 空白行の...
-
switch()文で値の大小比較
-
findstrのerrorlevel
-
syntax error, unexpected 'ech...
-
phpでcookieがうまく保存されない
-
小数点以下0の非表示
-
バッチファイルで、全てのウィ...
-
ゼロとNULLを区別して number_f...
-
Windowsのsetコマンドでの小数...
-
オブジェクトの中身の判定(PHP)
-
DBのハッシュ化したパスワード...
-
XMLのタグの有無をPHPで判定し...
-
pdftkを使った処理をバッチファ...
-
batファイルでPC名称の変更
-
変数の中の<br>を消したい
-
bashの関数の引数にスペースが...
-
csvの特定のキーワードを指定し...
-
htmlで複数の個数入力欄を表示...
おすすめ情報