php实践,static静态变量如何作为函数多次调用的共享变量?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
本文探讨php
中static
变量的一种比较特殊的用法。一般来说,static
是用在类的属性上的。static
关键字把普通属性变成静态的属性。那么,本文中,目标用法并不是这样的,而是使用在函数里面的。
苏南大叔的“程序如此灵动博客”,记录苏南大叔的编程经验总结。本文测试环境:win10
,nginx@1.15.11
,php@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"
}
方法静态变量【本文主体】
这个代码就是结合上述两种情况了。从使用的效果上来看,给一个普通变量加上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 ATTR | SN::ATTR、$sn::ATTR |
类变量 | public $attr | $sn->attr |
类静态变量 | public static $attr | SN::$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大叔
苏南大叔
苏南大叔
苏南大叔
相关文章
- https://newsn.net/say/php-static-method.html
- https://newsn.net/say/php-debug-func.html
- https://newsn.net/say/php-reflect-class.html
结束语
本文仅仅就是普通涉及静态变量的一些使用,更多苏南大叔的php
经验文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。