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();
 
?>

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值