在PHP中,“final static”和“const”有什么区别?

17

我知道这个问题在其他编程语言中已经被问过了... 但是这并不意味着在 PHP 领域中的答案是一致的,所以我提出了这个问题。

请问有人能告诉我在 PHP 中,“final static”和“const”的具体区别是什么吗?

3个回答

34

final

子类无法修改final修饰的方法。这样可以防止类继承,方法重写,以及/或方法重定义。

只有在类内部定义的方法和/或类可以被定义为final

static

将类方法属性声明为静态值,以便您可以在不实例化对象的情况下访问它们。这些是在父类和子类之间共享的。

类定义不能像final一样被声明为static

const

为一个类创建一个常量值。常量值将会被分配且不能被任何父或子类的方法所更改。

每个类实例都会分配类常量。


const本身是一种类型说明符。它不能与public/private/static等放在一起。如前所述,final可以与任何方法或类定义一起使用,因此适用于所有方法和类。static不能应用于类定义,但可以用于类属性。

更新

自PHP 7.1.0起,类常量允许使用修饰符。

class Foo {
    public const bar = 5;
    private const baz = 6;
}
总之,final static不能用于定义类似于以下内容的东西:

class X {
    final static x = 5;
}

这就是为什么你有一个const的原因。


2
在 PHP 8.1 中,将允许使用 final const - Rain

2

final 不适用于类属性,只适用于类和方法。它意味着该方法不能被覆盖,或该类不能被继承。const 是 PHP 中等同于 Java final 变量的关键字。


0

他们完全没有任何共同点,并且创造出完全不同类型的东西。const声明常量。final static声明一个静态方法(可以在没有类实例的情况下调用),并且该方法是最终的(不能被子类重写)。独立使用static可用于定义一个类范围的变量,该变量不是常量(但变量不能是final)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接