首页  >  文章  >  后端开发  >  php 静态变量的初始化代码示例

php 静态变量的初始化代码示例

怪我咯
怪我咯原创
2017-07-16 11:25:511822浏览

什么是static静态变量?

静态变量 类型说明符是static。

静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束(相反,而 auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放)。静态变量虽在程序的整个执行过程中始终存在,但是在它作 用域之外不能使用。

另外,属于静态存储方式的变量不一定就是静态变量。 例如:外部变量(在PHP中指全局变量)虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。

所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。

静态变量可以在任何可以申请的地方申请,一旦申请成功后,它将不再接受其他的同样申请。

静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。

php的成员变量可以在声明的同时进行初始化,但是只能用标量进行初始化。

例如:

class A { 
public $f1 = 'xxxx'; 
static public $f2 = 100; 
}

如果要将变量赋值为对象,那么只能在构造器中进行初始化,例如:

class A { 
private $child; 
public function construct() { 
$this->child = new B(); 
} 
}

但是php中并没有一个类似java中的静态构造器/静态块的东西,就没有合适的时机对其进行初始化了。

对于共有的成员还有办法解决,例如:

class A { 
static public $child; 
} 
A::$child = new B();

对于私有的成员似乎就没有什么干净的方法了,只能这样做:

class A { 
static private $child; 
static public initialize() { 
self::$child = new B(); 
} 
} 
A::initialize();

以上是php 静态变量的初始化代码示例的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn