php中对static关键字的了解
php中static关键字的懂得
static静态变量的懂得
静态变量 类型说明符是static。
静态变量属于静态储备方式,其储备空间为内存中的静态数据区(在 静态储备区内分配储备单元),该区域中的数据在整个程序的运转期间不断占用这些储备空间(在程序整个运转期间都不开释),也可以认为是其内存地址不变,直 到整个程序运转完毕(相反,而auto主动变量,即动态部分变量,属于动态储备类别,占动态储备空间,函数调取完毕后即开释)。静态变量虽在程序的整个施行历程中始终存在,但是在它作用域之外不克不及使用。
别的,属于静态储备方式的量不必然就是静态变量。 例如:外部变量虽属于静态储备方式,但不必然是静态变量,必需由 static加以定义后才能成为静态外部变量,或称静态全局变量。
所有的全局变量都是静态变量,而部分变量只要定义时加上类型润饰符static,才为部分静态变量。
静态变量可以在任何可以申请的地方申请,一旦申请成功后,它将不再接受其他的一样申请。
静态变量并不是说其就不克不及改动值,不克不及改动值的量叫常量。 其具有的值是可变的 ,并且它会保持最新的值。说其静态,是由于它不会随着函数的调取和退出而发生转变。即上次调取函数的时候,假如我们给静态变量给予某个值的话,下次函数调取时,这个值保持不变。
函数内静态变量
static usage
1,请看下面这个例子:
function doStuff(&$cache) { static $cache = null; if ($cache === null) { echo $cache = '%heavy database stuff or something%'; } } $cache = 'not null'; doStuff($cache); // Output %heavy database stuff or something%
并且,在doStuff()函数中,静态变量$cache并不是不成改动的,$cache从null变成了%heavy database stuff or something%;从上面的例子可以看出,static关键字影响了援用传递,即便我们使用了&来试图改动变量$cache的值和地址,依然不影响doStuff()函数中的if推断;
类中的静态办法和属性
● 我们把类当做生成对象的模板,把对象作为活动组件,实例化一个类,得到一个对象,然后拜访这个对象的办法和属性。
例如 $foo = new Foo(); $foo就是类Foo实例化后的对象。
● 静态办法是以类作为作用域的函数,我们可以不经实例化,直接拜访静态办法.
例如:
class Foo() { public static function a(){} } // 拜访a(); Foo::a();
● 在当前类(非子类)中拜访静态办法或属性使用self::method(),note: self可以调取父类的静态办法和属性;● 静态办法不克不及拜访这个类中的一般属性和办法,由于那些属性和办法属于一个对象,而静态办法和属性又称为类变量的办法。
延迟静态绑定
先看个例子
header("Content-type: text/html; charset=utf-8"); class A { public static function aa() { echo "非延迟静态绑定<br>"; } public static function bb() { echo self::aa(); // Output 非延迟静态绑定 echo static::aa(); // Output 延迟静态绑定 } } class B extends A { public static function aa() { echo "延迟静态绑定"; } public static function cc() { echo self::bb(); } } B::bb(); // Output 非延迟静态绑定 延迟静态绑定
php5.3之后,我们可以使用static来猎取子类的aa()办法,它指的的被调取的类。使用self关键字,指是当前类(A),因此猎取的也就是类A的aa()办法的返回值;
总结:
static关键字的延迟绑定有许多用处,一样在项目中可边做边总结。
更多PHP相关知识,请拜访PHP中文网!
以上就是php中对static关键字的懂得的具体内容,更多请关注百分百源码网其它相关文章!