博客
关于我
php static 变量
阅读量:793 次
发布时间:2023-02-27

本文共 1550 字,大约阅读时间需要 5 分钟。

PHP静态变量详解

在PHP编程中,静态变量是一种重要的概念,能够帮助开发者在函数或类中保持状态信息。以下将从静态变量的定义、行为以及应用场景等方面详细阐述。

一、函数内的static变量

在函数内部定义的static变量具有特定的行为。与非静态变量不同,static变量在函数被调用多次时不会重置,而是保留上一次的值。定义时如果赋予了初始值,那么这一赋值操作只会在第一次调用时执行。

示例代码:

function getdata() {    static $c2 = 0; // 初始化语句,只会在第一次调用时执行    $c2 = $c2 + 1;    echo $c2;}

输出结果:

  • 第一次调用:getdata(); // 结果 1
  • 第二次调用:getdata(); // 结果 2

二、静态类成员变量

静态成员变量属于类本身,所有实例共享该变量。静态成员变量可以在不创建对象的情况下访问,并且访问速度较快。

示例代码:

class C1 {    static $c2 = 1; // 定义静态成员变量    public function inc() {        static $c = 0;        $c = $c + 1;        echo "$c\n";    }}

使用示例:

$o = new C1();$o->inc(); // 输出 1$p = new C1();$p->inc(); // 输出 2// 直接访问静态变量$p::$c2 = 5;echo C1::$c2; // 输出 5echo $p::$c2; // 输出 5

三、静态方法

静态方法的定义与静态成员变量类似,它们只能访问静态成员变量,不能访问非静态成员变量(否则会报错)。

示例代码:

class C3 {    public static $c3 = 1;    public static function inc1() {        echo C3::$c3; // 输出 1    }    public static function inc2() {        // 会报错:$this不允许出现在静态方法中        echo $this->c5;    }}

调用示例:

C3::inc1(); // 输出 1// C3::inc2() 会抛出错误:Uncaught Error: Using $this when not in object context

四、Trait的静态变量

Trait(特性)的静态变量在不同类中使用时是相互独立的,不会互相影响。

示例代码:

trait Counter {    static $c = 0;    public function inc() {        static $c = 0;        $c = $c + 1;        echo "$c\n";    }}

使用示例:

class C1 {    use Counter;}class C2 {    use Counter;}$o = new C1();$o->inc(); // 输出 1$o->inc(); // 输出 2$b = new C1();$b->inc(); // 输出 3$b->inc(); // 输出 4$p = new C2();$p->inc(); // 输出 1$p->inc(); // 输出 2

通过以上内容,可以看出静态变量在PHP中具有重要的应用价值。无论是函数内的static变量,还是类中的静态成员变量和静态方法,都能够帮助开发者在多次调用时保持状态信息,从而提高程序的效率和功能稳定性。

转载地址:http://ervfk.baihongyu.com/

你可能感兴趣的文章
Sql 随机更新一条数据返回更新数据的ID编号
查看>>
OSG学习:空间变换节点和开关节点示例
查看>>
OSG学习:纹理映射(一)——多重纹理映射
查看>>
OSG学习:纹理映射(七)——聚光灯
查看>>
OSG学习:纹理映射(三)——立方图纹理映射
查看>>
OSG学习:纹理映射(二)——一维/二维/简单立方图纹理映射
查看>>
OSG学习:纹理映射(五)——计算纹理坐标
查看>>
OSG学习:纹理映射(六)——灯光
查看>>
OSG学习:纹理映射(四)——三维纹理映射
查看>>
OSPF 四种设备角色:IR、ABR、BR、ASBR
查看>>
SQL Server 存储过程分页。
查看>>
OSPF不能发现其他区域路由时,该怎么办?
查看>>
OSPF两个版本:OSPFv3与OSPFv2到底有啥区别?
查看>>
SQL Server 存储过程
查看>>
OSPF在大型网络中的应用:高效路由与可扩展性
查看>>
OSPF技术连载13:OSPF Hello 间隔和 Dead 间隔
查看>>
OSPF技术连载17:优化OSPF网络性能利器——被动接口!
查看>>
OSPF技术连载18:OSPF网络类型:非广播、广播、点对多点、点对多点非广播、点对点
查看>>
OSPF技术连载19:深入解析OSPF特殊区域
查看>>
SQL Server 复制 订阅与发布
查看>>