constantes vs propiedades en php?

Simplemente no entiendo,

class MyClass { const constant = 'constant value'; function showConstant() { echo self::constant . "\n"; } } class MyClass { public $constant = 'constant value'; function showConstant() { echo $this->constant . "\n"; } } 

¿Cuál es la principal diferencia? Es lo mismo que definir vars, ¿no?

Las constantes son constantes (wow, ¿quién hubiera pensado en esto?) No requieren una instancia de clase. Por lo tanto, puede escribir MyClass::CONSTANT , por ejemplo, PDO::FETCH_ASSOC . Por otro lado, una propiedad necesita una clase, por lo que necesitaría escribir $obj = new MyClass; $obj->constant $obj = new MyClass; $obj->constant .

Además, hay propiedades estáticas, tampoco necesitan una instancia ( MyClass::$constant ). Aquí nuevamente la diferencia es que MyClass::$constant puede cambiarse, pero MyClass::CONSTANT puede no ser así).

Por lo tanto, use una constante siempre que tenga un valor escalar, sin expresión, que no se modifique. Es más rápido que una propiedad, no contamina el espacio de nombres de la propiedad y es más comprensible para cualquiera que lea tu código.

Al definir un valor de const dentro de una clase, se asegura de que no se cambie intencional o involuntariamente.

Bueno, si hago $myClass->constant = "some other value" (dado $ myClass es una instancia de MyClass) en el último ejemplo, entonces el valor ya no es constante. Ahí tienes la diferencia. El valor de una constante no se puede cambiar, porque … es constante.