関数内の変数を関数外で呼び出そうとするとどうなるか?
→
Undefined variable result
アンディファインド バリアブル ふにふに
resultという変数はないよ~
ここまで
--->myfunction.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ユーザー定義関数</title>
<link rel="stylesheet" href="test1.css">
</head>
<body>
<h1>ユーザー定義関数</h1>
<?php
//ユーザー定義関数add
//戻り値なしで関数内で書き出す
function add($num1,$num2){
echo $num1+$num2;
}
add(10,20);
?>
<?php
//ユーザー定義関数minus
//戻り値ありで関数の呼び出し元の変数に格納
function minus($num1,$num2){
return $num1-$num2;
}
$hoge=minus(30,10);
echo $hoge;
?>
</body>
</html>
関数は変数と違って「どこで宣言しているか」は関係ない。なんなら呼び出し元が先に記述されて、関数本体は末尾でも全然OK
スコープの範囲の実験
--->myfunction2.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ユーザー定義関数</title>
<link rel="stylesheet" href="test1.css">
</head>
<body>
<h1>ユーザー定義関数</h1>
<?php
$result="いいいい";
function h($str){
$result=htmlspecialchars($str,ENT_QUOTES);
}
h("ああああ");
echo $result;
?>
</body>
</html>
ユーザー定義関数「外」で作った変数も、関数内で使えない。
値のやり取りは「引数と返り値」のみで行う。
returnが2行もありえない。
return $result1;
return "ああああ";
→
$result1が返る。エラーは出ないらしい。
ただif-elseだったら、returnが2つ出てくる可能性はあるよ。
グローバル変数をphpでつくることもできるらしいが(関数外/内で使える)、phpでは普通作らないらしいよ
関数への受け渡しや受け取りは、引数やらreturnをつかってやり取りしますよ
returnで複数の値を返すことはできる
その場合配列を使う
--->myfunction3.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ユーザー定義関数</title>
<link rel="stylesheet" href="test1.css">
</head>
<body>
<h1>ユーザー定義関数</h1>
<?php
function minus($num1,$num2){
$num3=$num1-$num2;
$res[]=$num1;
$res[]=$num2;
$res[]=$num3;
return $res;
}
print_r(minus(30,20));
?>
</body>
</html>
---実行結果
ユーザー定義関数
Array ( [0] => 30 [1] => 20 [2] => 10 )
はいれつで書き出される
それにしても直接echoとかprint_rとかでオリジナルの関数(ユーザー定義関数)と引数を記述しちゃう(当然戻り値あり)のは抵抗があるんだが、
普通はいったん変数に戻り値を格納する。
ただ、それは「ほかでもつかうのなら」変数にいれるし、一回こっきり出力するだけならダイレクト記述もありうるよ。
では4つのファイルを作りますよ
header.php
main.php
footer.php
functions.php
main→functions→