PHP静态类self和static用法

在 PHP 中,static 和 self 是两个重要的关键字,用于类的静态成员访问和方法调用。它们的主要区别在于它们的绑定方式和作用范围。

  • static

static 的特点

static 引入了后期静态绑定(Late Static Binding),它的作用是根据实际调用的类来绑定方法或属性。与 self 不同,static 会在运行时解析调用类,从而支持多态。

php 复制代码
<?php

class Car {
    public static function model() {
        static::getModel();
    }

    protected static function getModel() {
        echo "I am a Car!";
    }
}

class Mercedes extends Car {
    protected static function getModel() {
        echo "I am a Mercedes!";
    }
}

Mercedes::model(); // 输出: I am a Mercedes!
  • self
php 复制代码
<?php

class Car {
    public static function model() {
        self::getModel();
    }

    protected static function getModel() {
        echo "I am a Car!";
    }
}

class Mercedes extends Car {
    protected static function getModel() {
        echo "I am a Mercedes!";
    }
}

Mercedes::model(); // 输出: I am a Car!

self 和 static 的区别

  • 绑定方式:self 是编译时绑定,指向定义方法的类;static 是运行时绑定,指向调用方法的类。

  • 多态支持:self 不支持多态,而 static 支持多态。

  • 使用场景:self 适用于明确需要引用当前类的场景;static 适用于需要动态绑定的场景。

总结来说,self 和 static 在静态方法和属性的访问中各有用途。self 更加直接,而 static 提供了更灵活的多态支持,尤其在继承和动态调用中非常有用。