17

我意识到这个问题已经在其他地方被问过不同的编程语言......但这并不是 PHP 域中相同答案的 100% 指标,所以我问这个问题。

有人可以告诉我,特别是在 PHP 中,“final static”和“const”有什么区别吗?

4

3 回答 3

34

final

子类不能修改方法类。这可以防止类继承、方法覆盖和/或方法的重新定义。

只有类中的类定义和/或方法可以定义为 final.

static

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

类定义不能static不同final

const

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

类常量是为每个类的实例分配的。


const本身就是一个类型说明符。它不能与public/ private/ staticetc.一起使用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.

于 2013-10-20T03:45:55.247 回答
2

final不适用于类属性,仅适用于类和方法。这意味着该方法不能被覆盖,或者该类不能被继承。const是 PHP 等价于 Javafinal变量。

于 2013-10-20T03:19:27.373 回答
0

他们没有任何共同点,他们创造了完全不同的东西。const声明一个常量。final static声明一个静态方法(可以在没有类实例的情况下调用)和最终方法(不能被子类覆盖)。static单独可以用来定义一个类范围的变量,它不是常量(但变量不能是final)。

于 2013-10-20T03:19:16.593 回答