美文网首页PHP很简单
PHP强化之19 - 静态 Static

PHP强化之19 - 静态 Static

作者: 四月不见 | 来源:发表于2019-01-05 01:02 被阅读0次

一、简介

static关键字用来定义静态方法和属性,也可以用来定义静态变量以及后期静态绑定。

声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

二、静态方法和属性

案例说明:

class Foo{
    public static $my_static = 'foo';  //声明静态属性
    public function staticFunc(){
        return self::$my_static;
    }
    static public function test(){
        return $this->$my_static;  //致使错误,this 在静态方法中不可用
    }

}

class UseFoo{
    static public function index(){
        $eof = "<br/>";

        echo Foo::$my_static,1,$eof; //静态属性的调用方式

        $foo = new Foo();
        echo $foo->staticFunc(),2,$eof;
        echo $foo->my_static,3,$eof; //报错,因为不能使用->方式调用静态属性
        echo $foo::$my_static,4,$eof;
    }
}

UseFoo::index(); //直接调用静态方法

注意:
1)由于静态方法不需要通过对象即可调用,所以伪变量$this 在静态方法中不可用。
2)静态属性不可以由对象通过->操作符来访问。
3)静态方法可以通过类::方法名()的形式调用,也可以通过$this->方法名()的形式。

三、使用静态变量

变量范围的另一个重要特性是静态变量(static variable)。静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。

案例说明:

function test($id)
{
  static $count=0;
  echo "{$id}=>count is :".$count."<br/>";
  $count++;  
}

test(1);
test(2);
test(3);

//结果如下:
1=>count is :0
2=>count is :1
3=>count is :2

注意:
1)静态变量仅初始化一次
2)每次执行函数该值会保留
3)static修改的变量是局部的,仅在函数内部有效
4)可以用来记录函数调用次数,从而可以在某些条件下终止递归

四、后期静态绑定

自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。

准确说,后期静态绑定工作原理是存储了在上一个“非转发调用”(non-forwarding call)的类名。当进行静态方法调用时,该类名即为明确指定的那个(通常在 :: 运算符左侧部分);当进行非静态方法调用时,即为该对象所属的类。所谓的“转发调用”(forwarding call)指的是通过以下几种方式进行的静态调用:self::,parent::,static:: 以及 forward_static_call()。可用 get_called_class() 函数来得到被调用的方法所在的类名,static:: 则指出了其范围。

该功能从语言内部角度考虑被命名为“后期静态绑定”。“后期绑定”的意思是说,static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。

官方文档: http://php.net/manual/zh/language.oop5.late-static-bindings.php

五、经典案例

1、写出如下程序的输出结果

$count = 5;

function get_count(){
        static $count;
        return $count++;
}
echo $count,"\n\r";
++$count;

echo get_count(),"\n\r";
echo get_count(),"\n\r";

结果如下:

root@Chan:/var/www/html# php demo25.php 
5

1

结果分析:

参考

官方手册:
http://www.php.net/manual/zh/language.oop5.static.php

相关文章

  • PHP强化之19 - 静态 Static

    一、简介 static关键字用来定义静态方法和属性,也可以用来定义静态变量以及后期静态绑定。 声明类属性或方法为静...

  • php中static关键字的作用

    static翻译成中文是静态的意思。在php中在变量名或者方法名加上static关键字,意思就是静态方法或者静态变...

  • 九月十七

    PHP类和对象之Static静态关键字 静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进...

  • php基础(一)

    一、PHP部分 1.函数内部 static 和 global 关键字的作用 static 是静态变量,在局部函数中...

  • PHP之Static(静态)关键字

    声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。...

  • PHP使用static关键字声明静态属性和静态方法

    在PHP中,通过static关键字修饰的成员属性和成员方法被称为静态属性和静态方法。 静态属性和静态方法不需要在被...

  • php的静态成员static

    静态变量,静态方法和常量是随着类的加载而加载的,而其他普通变量是随着类的实例化而加载的。 在类中使用self关键字...

  • php面对对象编程

    静态方法static (public static $a=1) (static function) 静态方法不能...

  • PHP调用类的静态变量

    PHP大法好 PHP中类的静态变量跟java一样,在变量前面加上static即可。 调用有两种方法

  • PHP常见概念混淆(七)之self、static、parent的

    前言 首先,这个 static 符号跟 static(静态)关键字不是一个东西。这三个符号在PHP对象中共有两种用...

网友评论

    本文标题:PHP强化之19 - 静态 Static

    本文链接:https://www.haomeiwen.com/subject/fdbmlqtx.html