我知道这个问题在其他编程语言中已经被问过了... 但是这并不意味着在 PHP 领域中的答案是一致的,所以我提出了这个问题。
请问有人能告诉我在 PHP 中,“final static”和“const”的具体区别是什么吗?
final
子类无法修改final
修饰的方法或类。这样可以防止类继承,方法重写,以及/或方法重定义。
只有在类内部定义的方法和/或类可以被定义为
final
。
static
将类方法或属性声明为静态值,以便您可以在不实例化对象的情况下访问它们。这些是在父类和子类之间共享的。
类定义不能像
final
一样被声明为static
。
const
为一个类创建一个常量值。常量值将会被分配且不能被任何父或子类的方法所更改。
每个类实例都会分配类常量。
const
本身是一种类型说明符。它不能与public
/private
/static
等放在一起。如前所述,final
可以与任何方法或类定义一起使用,因此适用于所有方法和类。static
不能应用于类定义,但可以用于类属性。
更新
总之,
class Foo { public const bar = 5; private const baz = 6; }
final static
不能用于定义类似于以下内容的东西:
class X { final static x = 5; }
这就是为什么你有一个
const
的原因。
final
不适用于类属性,只适用于类和方法。它意味着该方法不能被覆盖,或该类不能被继承。const
是 PHP 中等同于 Java final
变量的关键字。
他们完全没有任何共同点,并且创造出完全不同类型的东西。const
声明常量。final static
声明一个静态方法(可以在没有类实例的情况下调用),并且该方法是最终的(不能被子类重写)。独立使用static
可用于定义一个类范围的变量,该变量不是常量(但变量不能是final
)。
final const
。 - Rain