PHP static静态局部变量和静态全局变量

使用静态局部变量的原因是它不能被外部使用,但是它的值依然在没此使用后保留。虽然使用全局变量可以实现相同的功能,但是它经常会造成意外。
静态局部变量的特点:

  • 1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值

  • 2.静态局部变量只会初始化一次

  • 3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。即使局部静态变量
    定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。

  • 4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

    
<?php
    function test()
    {
        static $nm = 1;
        $nm = $nm * 2;
        print $nm."<br />";
    }
    
    // 第一次执行,$nm = 2
    test();
    // 第一次执行,$nm = 4
    test();
    // 第一次执行,$nm = 8
    test();
?>

函数test()执行后,变量$nm的值都保存了下来了。
在class中经常使用到静态属性,比如静态成员、静态方法。
Program List:类的静态成员
静态变量$nm属于类nowamagic,而不属于类的某个实例。这个变量对所有实例都有效。
::是作用域限定操作符,这里用的是self作用域,而不是$this作用域,$this作用域只表示类的当前实例,self::表示的是类本身

    
<?php
    class nowamagic 
    {
        public static $nm = 1;
        
        function nmMethod() 
        {
            self::$nm += 2;
            echo self::$nm . '<br />';
        }
    }
    
    $nmInstance1 = new nowamagic();
    $nmInstance1 -> nmMethod();
    
    $nmInstance2 = new nowamagic();
    $nmInstance2 -> nmMethod();
?> 
程序运行结果:
3
5

Program List:静态属性

    
<?php
    class NowaMagic
    {
        public static $nm = 'www.nowamagic.net';

        public function nmMethod() 
        {
            return self::$nm;
        }
    }
    
    class Article extends NowaMagic
    {
        public function articleMethod() 
        {
            return parent::$nm;
        }
    }
    
    // 通过作用于限定操作符访问静态变量
    print NowaMagic::$nm . "<br />";
    
    // 调用类的方法
    $nowamagic = new NowaMagic();
    print $nowamagic->nmMethod() . "<br />";
    
    print Article::$nm . "<br />";
    
    $nmArticle = new Article();
    print $nmArticle->nmMethod() . "<br />";
?>
程序运行结果:
www.nowamagic.net
www.nowamagic.net
www.nowamagic.net
www.nowamagic.net

PHP的静态变量介绍

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容