如有错误,望您留言指正

一、作用(4种)

  • 定义属性
  • 定义静态方法
  • 定义静态变量
  • 后期静态绑定

二、详细介绍

例:

//Student1属性及方法均设置静态,
//Student2属性及方法不设置静态,
class Student1{
    static $name = "Kangkang";
    static function outPutInfo(){
        echo "age:18;sex:man";
    }
    static function putn
}
class Student2{
    public $name = "Kangkang";
    public function outPutInfo(){
        echo "age:18;sex:man";
    }
}

1、静态属性

- 类未实例化可以直接访问,实例化后**不可**访问
```
echo Student1::$name; //输出  Kangkang
$student = new Student1();
echo $student->name;//Undefined property: Student1::$name
```
- 如果没有访问控制,默认共有(public)
- 只能被初始化为文字或常量,不能使用表达式
```
  class Student1{
        $a = 1;
        static $name = $a;//此处会报错
}
```

2、静态方法

- 类未实例化可以直接访问,实例化后**可以**访问
- 如果没有访问控制,默认共有(public)
- 由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

3、 静态变量

属于静态存储方式,其存储空间为内存中的静态数据区(在静态存储区内分配存储单元),该 区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变,直到整个程序运行结束。
也就是说,除非程序结束,否则一直占着空间。

4、后期静态绑定

- 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。
说明看不懂,直接举例:

    class A {
        public static function who() {
            echo __CLASS__;
        }
        public static function test() {
            self::who();
        }
    }

class B extends A {
        public static function who() {
            echo __CLASS__;
        }
    }
class C extends A {
    public static function who() {
        echo __CLASS__;
    }
    //重写了test方法
    public static function test() {
        self::who();
    }
}

B::test()."\n";//输出A
C::test();//输出C






Jtoman
24 声望3 粉丝