我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文探讨phpstatic变量的一种比较特殊的用法。一般来说,static是用在类的属性上的。static关键字把普通属性变成静态的属性。那么,本文中,目标用法并不是这样的,而是使用在函数里面的。

苏南大叔:php实践,static静态变量如何作为函数多次调用的共享变量? - php静态变量
php实践,static静态变量如何作为函数多次调用的共享变量?(图2-1)

苏南大叔的“程序如此灵动博客”,记录苏南大叔的编程经验总结。本文测试环境:win10nginx@1.15.11php@8.2.10-nts

类静态属性【常见】

static静态变量一般都是用在class类里面的。比如:

class S{
    const A ="sunan大叔";    
    static $a ="苏南大叔";
    public $b ="普通变量";
}
echo S::A;     // 这里是个常量
echo S::$a;
// echo S::$b; // error

输出:

sunan大叔
苏南大叔

函数静态变量

function sunan($x)
{
    static $all = [];
    echo count($all);
    $key = str_repeat($x,count($all)+1);
    $all[$key] = $x;
    return $all;
}
sunan("a");
sunan("b");
sunan("b");
$all = sunan("c");
var_dump($all);

输出:

0123
array(4) {
  ["a"]=>
  string(1) "a"
  ["bb"]=>
  string(1) "b"
  ["bbb"]=>
  string(1) "b"
  ["cccc"]=>
  string(1) "c"
}

苏南大叔:php实践,static静态变量如何作为函数多次调用的共享变量? - 静态变量
php实践,static静态变量如何作为函数多次调用的共享变量?(图2-2)

方法静态变量【本文主体】

这个代码就是结合上述两种情况了。从使用的效果上来看,给一个普通变量加上static属性后,效果上就类似一个特殊的全局变量,可以在同名函数的多次调用中,共享使用这个变量。第二次调用相同函数的时候,静态变量居然不会被再次初始化,而是使用上一次函数调用后的值。效果上是有些小神奇。

class N {
    const AAA = "苏南大叔加油!";
    static $aaa="==========";
    public static function test(){
        static $cnt = 0;
        $cnt ++;
        static::$aaa = str_repeat(self::AAA,$cnt);
        return $cnt;
    }
}
N::test();
N::test();
N::test();
echo N::$aaa;

输出:

苏南大叔加油!苏南大叔加油!苏南大叔加油!

调用方式总结

名称定义方法调用方法
类常量const ATTRSN::ATTR、$sn::ATTR
类变量public $attr$sn->attr
类静态变量public static $attrSN::$attr、$sn::$attr
类方法public function test()$sn->test()
类静态方法public static function test()SN::test()、$sn::test()、$sn->test()

测试代码:

class SN
{
    public static $attr="sunan大叔";
    public static function test(){
        echo "苏南大叔",PHP_EOL;
    }
}
echo SN::$attr,PHP_EOL;
$sn = new SN;
echo $sn::$attr,PHP_EOL;
echo $sn->$attr,PHP_EOL;  // 这个输出为空
SN::test();
$sn::test();
$sn->test();

输出:

sunan大叔
sunan大叔

苏南大叔
苏南大叔
苏南大叔

相关文章

结束语

本文仅仅就是普通涉及静态变量的一些使用,更多苏南大叔的php经验文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php