static静态变量,静态方法

以下所述,静态变量是前缀static关键字的,非静态变量即普通变量。

一、普通静态变量:

1.局部变量在函数完成时就会自动释放,而用static声明的局部变量不会被释放,它的生存周期是全局的,可见性是块内。

2.用static声明的变量会保存上一次被调用的值,只会被初始化一次因此static局部变量可以当做全局变量来使用

 这个例子的输出结果为 0,1,2

<?php 
	function myTest()
	{
    	static $x=0;
   		echo $x;
   	 	$x++;
	} 
	myTest();
	myTest();
	myTest();
?>

二、静态成员变量:

1.静态数据成员变量:

如下述代码:定义一个person类,age变量为静态数据成员变量。

访问静态变量的两种方式:1.类名::变量名     2.对象名::对象名 

静态成员变量是属于类的,不属于任何一个对象,因此可以实现对象之间的信息共享,不同实例对象所访问的静态变量是同一个,在一个对象中修改静态变量,别的对象访问的静态变量值也发生改变。

最好使用静态函数访问静态数据当使用非静态函数访问静态数据成员变量时,应该用非内联函数调用,即在类体中声明,类体外定义的函数。

2.静态函数成员变量:

其基本性质与数据变量成员基本相同,值得注意的是,最好不要用静态函数访问非静态数据,因为非静态数据需要用对象访问,而静态函数可以用类名访问。要使用非静态函数访问非静态数据

下例是用PHP举例,其他语言的访问去掉$即可。

<?php  
	class Person{  
		static $age = 10;
		 
		static function des(){ 
			//self:指的是当前的类   $this指的是当前的实例对象 
			echo "<hr>".self::$age;
		}
		//构造方法
		function __construct(){//只要创建对象,构造方法就会自动执行
			echo "对象创建";
		}
		function __destruct(){//默认程序执行完成后调用析构方法
			echo "死亡方法";		
		}
	} 
	
//1.实例化两个对象per1,per2
	$per1 = new Person();
	$per2 = new Person();
	
//2.访问静态变量的两种方式: 
	//1.通过类访问静态变量 ---------
	echo Person::$age;
	//2.直接通过实例对象访问常量--------
	echo $per1::$age;
	  
//3.不同实例对象所访问的静态变量是同一个(共享)
	echo $per1::$age;//输出10
	echo $per2::$age;//输出10
	
	//所以在一个对象中修改静态变量,别的对象访问的静态变量值也发生改变
	$per2::$age=100;
	echo $per1::$age;//输出100
	 
//4.释放内存
	$per2 = null; 
	    
//5.调用静态方法:静态方法不会每个实例都去初始化,类似于原型方法
	Person::des();
 
?>


 

发布了22 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/floracuu/article/details/78106274