在PHP中,"final static"和"const"之间有什么区别?

Mon*_*dia 15 php variables static const

我意识到这个问题已经在别处被要求用于不同的编程语言......但是这不是PHP域中相同答案的100%指标,所以我问这个问题.

有人可以告诉我,特别是在PHP中,"final static"和"const"之间的区别是什么?

hjp*_*r92 31

final

方法不能被一个子类进行修改.这可以防止类继承,方法重写和/或重新定义方法.

只能将类中的类定义和/或方法定义为 final.

static

将类方法属性声明为静态值,以便您无需实例化对象即可访问它们.这些在父类和子类之间共享.

类定义不能与之static不同final.

const

这些为类创建了一个常量值.常量值将被更改,并且不能通过父类或子类中的方法更改.

每个类的实例都分配了类常量.


const本身就是一个类型说明符.它不能与把沿着public/ private/ static等等final,因为可以用任何方法或类定义,并因此一起使用之前提到的; 适用于所有这些.static不能应用于类定义,但可以用于类属性.

UPDATE

自PHP 7.1.0起,允许修饰符用于类常量.

class Foo {
    public const bar = 5;
    private const baz = 6;
}
Run Code Online (Sandbox Code Playgroud)

总而言之,final static不能用于定义如下内容:

class X {
    final static x = 5;
}
Run Code Online (Sandbox Code Playgroud)

这就是为什么你有一个const.

  • 在 PHP 8.1 中,将允许使用“final const”。 (2认同)