PHP中的static关键字

本文详细介绍了PHP中的static关键字,包括其变量作用域、声明静态类属性和方法、延迟静态绑定的概念和应用,并通过示例代码展示了静态变量在类中的使用,以及延迟静态绑定在多类继承中的作用。此外,还探讨了static在解决特定问题,如转账功能实现中的应用。
摘要由CSDN通过智能技术生成

PHP和Java中都会有static这个关键字,用法也类似,当问及PHP中的static用法是,很容易想出static可以声明类属性或方法为静态,静态属性和方法都是属于类的,静态属性不能通过对象访问,但静态方法可以通过对象访问。没错,是这样的,但是在PHP中static还有另外的用处哦。

先从static变量的作用域开始

PHP中static变量只存在于本地函数中,但是当程序执行完本函数后,static变量还会一直存在,考虑如下代码:

<?php
function test()
{
    $a = 0;
    echo $a . "\n";
    $a++;
}

// 都会输出0
for ($i=0; $i<5; $i++) {
    test();
}

在每次调用这个函数的时候,函数都会将$a变量置0,再输出,尽管每次输出后,变量$a都加1了,为了每次都能将$a的值保存起来,我们可以将它声明为static

<?php
function test()
{
    static $a = 0;
    echo $a . "\n";
    $a++;
}

// 输出
// 0
// 1
// 2
// 3
// 4
for ($i=0; $i<5; $i++) {
    test();
}

现在,$a只被初始化了一次,每次调用test()函数时,$a都会加1。

在递归函数中,同样可以使用静态变量,我们可以设置一个$count静态变量的函数运行计数器,保存运行的次数,当$count到10时,就退出递归函数,如下:

<?php
function test()
{
    static $count = 0;

    $count++;
    echo $count;
    if ($count < 10) {
        test();
    }
}

test();

静态变量初始化时只能是确定的一个值,不能是函数的返回值,下面的代码中,将sqrt()函数的结果赋值给静态变量$a会报错:

function foo(){
    static $a = 0;          // correct
    static $a = 1+2;        // correct (as of PHP 5.6)
    static $a = sqrt(121);  // wrong  (as it is a function)

    echo $a;
}

foo();

程序没有运行前,再phpstorm中就已经其实不能用表达式初始化静态变量:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PBBUxh1F-1603612876125)(http://p8m3309kb.bkt.clouddn.com/assign%20expression%20to%20static.png)]

程序运行时也会报如下错误:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oaoddliZ-1603612876127)(http://p8m3309kb.bkt.clouddn.com/run%20assign%20expression%20to%20static.png)]

声明类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值