戻る

ユーザ定義関数内での変数

ユーザ定義内で使われた変数は、その関数の中でのみ有効なローカル変数です。

下の例の場合、関数の外で、$moji_1、$moji_2の値は何も入っていないことがわかります。また、php.iniにてNoticeエラーも出力される設定になっている場合は、Notice: Undefined Variable: moji_1 in 「プログラムの位置」が表示され、$moji_1が未設定であるということがわかります。

PHP

<?php
header("Content-type: text/html; charset=utf-8");

function mymoji(){
	$moji_1 = "1";
	$moji_2 = "2";
	echo $moji_1 . $moji_2;
}

//12が出力
echo mymoji();

//何も出力されません
echo $moji_1 . $moji_2;
?>

JavaScript

<!DOCTYPE HTML>
<html lang="ja-JP">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function mymoji(){
	var moji_1 = "1";
	var moji_2 = "2";
	console.log(moji_1 + moji_2);
}

//12が出力
mymoji();

//何も出力されません
console.log(moji_1 + moji_2);
</script>
</head>
<body>
</body>
</html>

グローバル変数

ただし、ユーザ定義関数内で「global」と宣言された変数は、グローバル変数となり、関数の外でも使えるようになります。

PHP

<?php
header("Content-type: text/html; charset=utf-8");

function mymoji(){
	global $moji_1;
	global $moji_2;
	$moji_1 = "1";
	$moji_2 = "2";
	echo $moji_1 . $moji_2;
}

//12が出力
echo mymoji();

//12が出力
echo $moji_1 . $moji_2;
?>

JavaScript

<!DOCTYPE HTML>
<html lang="ja-JP">
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function mymoji(){
	moji_1 = "1";
	moji_2 = "2";
	console.log(moji_1 + moji_2);
}

//12が出力
mymoji();

//12が出力
console.log(moji_1 + moji_2);
</script>
</head>
<body>
</body>
</html>

$GLOBALS変数

global宣言と同様の動きをする方法が、スーパーグローバル変数「$GLOBALS」を使う方法です。

変数が$aだとしたとき、$GLOBALS["a"]と記述することにより、その時点の$aは$GLOBALS["a"]としてグローバルスコープを持つことになり、関数の外でもうちでも使うことができるようになります。

PHP

<?php
header("Content-type: text/html; charset=utf-8");

$a = 10;
function keisan_a(){
	$GLOBALS["a"] = GLOBALS["a"] + 2;
}

//12が出力
echo $a;

//12が出力
echo $GLOBALS["a"];
?>

静的変数(static)

関数内の変数は関数が呼び出されるごとに初期化されます。ただし、staticと宣言された変数は、静的変数となり、関数の実行が終わったあとも値を保持してくれます。

下のような関数の場合、呼び出されるごとに初期化されるので、常に実行結果は5になります。

PHP

<?php
header("Content-type: text/html; charset=utf-8");

$a = 10;
function mysuji(){
	$suji_1 = 0;
	$suji_2 = 5;
	$suji_1 += $suji_2;
	echo $suji_1;
}

mysuji(); //5が出力
mysuji(); //5が出力
mysuji(); //5が出力
?>

$suji_1をstaticをつけて宣言すると、$suji_1は静的変数となり、次の実行の時、前の実行の値を保持します。

PHP

<?php
header("Content-type: text/html; charset=utf-8");

$a = 10;
function mysuji(){
	static $suji_1 = 0;
	$suji_2 = 5;
	$suji_1 += $suji_2;
	echo $suji_1;
}

mysuji(); //5が出力
mysuji(); //10が出力
mysuji(); //15が出力
?>

inserted by FC2 system