PHP static変数のサンプル

PHPのstatic変数のサンプルです。

確認環境
・PHP 7.1.8

目次

関数でstatic変数を使用するサンプル

  • static変数は関数が終了しても変数の値を保持します。
  • 通常のローカル変数は関数が終了すると値は破棄されます。

コード

4行目は、通常のローカル変数です。
9行目は、static変数です。
13-15行目は、関数が終了すると変数の値は破棄されるので何度呼んでも値は変わりません。
17-19行目は、関数が終了してもstatic変数は値を保持しているので呼び出すたびに値が増えています。

<?php

function test1(){
	$a = 0;
	return ++$a;
}

function test2(){
	static $a = 0;
	return ++$a;
}

print test1(); //1
print test1(); //1
print test1(); //1

print test2(); //1
print test2(); //2
print test2(); //3
?>

クラスをインスタンス化してstatic変数を使用するサンプル

クラスをインスタンス化してstatic変数を使用するサンプルです。

コード

6行目は、通常の変数です。
15行目は、static変数です。
25-27行目は、同じ値が表示されます。
33-35行目は、static変数のため呼び出すたびに値が増えています。
→(注意)インスタンスはそれぞれ別です。

<?php
class Test1
{
	public function count()
	{
		$a = 0;
		++$a;
		return $a;
	}
}
class Test2
{
	public function count()
	{
		static $a = 0;
		++$a;
		return $a;
	}
}

	$t1 = new Test1();
	$t2 = new Test1();
	$t3 = new Test1();

	print $t1->count(); //1
	print $t2->count(); //1
	print $t3->count(); //1

	$t1 = new Test2();
	$t2 = new Test2();
	$t3 = new Test2();

	print $t1->count(); //1
	print $t2->count(); //2
	print $t3->count(); //3

?>

staticメソッドでstatic変数を使うサンプル

staticメソッドでstatic変数を使うサンプルです。

コード

6行目は、通常の変数です。
12行目は、static変数です。
17-19行目は、同じ値が表示されます。
21-23行目は、static変数のため呼び出すたびに値が増えています。

<?php
class Test1
{
	public static function count1()
	{
		$a = 0;
		++$a;
		return $a;
	}
	public static function count2()
	{
		static $a = 0;
		++$a;
		return $a;
	}
}
	print Test1::count1(); //1
	print Test1::count1(); //1
	print Test1::count1(); //1

	print Test1::count2(); //1
	print Test1::count2(); //2
	print Test1::count2(); //3
?>

△上に戻る