37、PHP面向对象的static关键字

阅读() @2018-10-29 18:16:06

static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”。

static的属性,在内存中只有一份,为所有的实例共用。也就是说,在内存中即使有多个实例,静态的属性也只有一份。

static关键字可以用来修饰变量、方法。

通过static关键字定义的属性或方法(例如static $web),只能由当前类通过【self::$web】来访问,其他类和子类是无法访问的。

例如下面这个例子,通过public声明的变量$web,因为实例化子类对象有4个,所以它最后会输出4个结果:

class Config{
	public $web;
	function __construct(){
		echo '<pre>';
		$this->show();
	}
	public function show(){
		if(empty($this->web)){
			$this->web = include 'test_arry.php';
			print_r($this->web);
		}
	}
}
$config = new Config();
$a = new Config();
$b = new Config();
$c = new Config();

但是以下代码使用static声明的变量,尽管有很多的实例化对象,但是最后的输出结果只有一个:

class Config{
	static $web;
	function __construct(){
		echo '<pre>';
		$this->show();
	}
	static function show(){
		if(empty(self::$web)){
			self::$web = include 'test_arry.php';
			print_r(self::$web);
		}
		
	}
}
$config = new Config();
$a = new Config();
$b = new Config();
$c = new Config();

include引用的文件内容是以下代码:

return array(
	'web_config'=>array(
		'webname'=>'赵一鸣博客',
		'weburl'=>'http://www.zymseo.com'
	),
	'db_config'=>array(
		'db_host'=>'localhost',
		'db_name'=>'zymseo',
		'db_pwd'=>'123456'
	)
);
微信二维码
锐壳主机