我意识到这个问题已经在别处被要求用于不同的编程语言......但这不是PHP域中相同答案的100%指标,所以我问这个问题。
有人可以告诉我,特别是在PHP中,“final static”和“const”之间的区别是什么?
答案 0 :(得分:27)
final
子类无法修改方法或类。这可以防止类继承,方法覆盖和/或方法的重新定义。
只能将类中的类定义和/或方法定义为
final
。
static
将类方法或属性声明为静态值,以便您无需实例化对象即可访问它们。这些在父类和子类之间共享。
与
static
不同,类定义不能final
。
const
这些为类创建一个常量值。常量值将被更改,并且不能通过父类或子类中的方法更改。
每个类的实例都会分配类常量。
const
本身就是一个类型说明符。它不能与public
/ private
/ static
等final
一起使用,如前所述,可以与任何方法或类定义一起使用,因此;适用于所有这些。 static
不能应用于类定义,但可以用于类属性。
<强>更新强>
自PHP 7.1.0以来,modifiers被允许用于类常量。
class Foo { public const bar = 5; private const baz = 6; }
总结一下,
final static
不能用于定义类似的内容:class X { final static x = 5; }
这就是为什么你有一个
const
。
答案 1 :(得分:1)
final
不适用于类属性,只适用于类和方法。这意味着无法覆盖该方法,或者无法继承该类。 const
是PHP等同于Java final
变量。
答案 2 :(得分:0)
他们没有任何共同之处,他们创造了完全不同的东西。 const
声明一个常数。 final static
声明一个静态的方法(可以在没有类的实例的情况下调用)和final(不能被子类覆盖)。单独static
可用于定义类范围的变量,该变量不是常量(但变量不能是final
)。