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

时间:2013-10-20 03:13:35

标签: php variables static const

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

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

3 个答案:

答案 0 :(得分:27)

final

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

  

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

static

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

  

static不同,类定义不能final

const

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

  

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


const本身就是一个类型说明符。它不能与public / private / staticfinal一起使用,如前所述,可以与任何方法或类定义一起使用,因此;适用于所有这些。 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)。