PHP中static变量有何用途,怎样应用呢?
Admin 2022-11-17 群英技术资讯 671 次浏览
函数内的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%
从上面的例子可以看出,static关键字影响了引用传递,即使我们使用了&来试图改变变量$cache的值和地址,仍然不影响doStuff()函数中的if判断;
而且,在doStuff()函数中,静态变量$cache并不是不可改变的,$cache从null变成了%heavy database stuff or something%;
类中的静态方法和属性
● 我们把类当成生成对象的模板,把对象作为活动组件,实例化一个类,得到一个对象,然后访问这个对象的方法和属性。
例如 $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 "非延迟静态绑定 "; } 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 非延迟静态绑定 延迟静态绑定
使用self关键字,指是当前类(A),因此获取的也就是类A的aa()方法的返回值;
php5.3之后,我们可以使用static来获取子类的aa()方法,它指的的被调用的类。
总结:
static关键字的延迟绑定有很多用途,一般在项目中可边做边总结。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
php信号量和共享内存的介绍:1、信号量:是系统提供的一种原子操作,一个信号数量,同时只有一个进程能操作。2、共享内存:是系统在存储器中打开的一个公共存储器区域,任何一个过程都可以访问。
设置思路1、用户注册时需要提供一个E-MAIL邮箱,目的就是用该邮箱找回密码。2、当用户忘记密码或用户名时,点击登录页面的“找回密码”超链接,打开表单,并输入注册用的E-MAIL邮箱,提交。3、系统通过该邮箱,从数据库中查找到该用户信息,并更新该用户的密码为一个临时密码(比如:12345678)。
今天小编就为大家分享一篇关于PHP count_chars()函数讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
方法:1、将“app\Http\Kernel.php”文件中的“App\Http\Middleware\VerifyCsrfToken”代码注释掉可以全局关闭csrf;2、在“app\Http\Middleware\VerifyCsrfToken.php”文件中修改“protected $except”内容,指定从CSRF验证中排除的url就可以部分关闭csrf。
在本篇文章里我们给大家带来一篇关于PHP如何合并两个或多个数组的知识点内容,有需要的朋友们学习下。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008