Я просто не понимаю,
class MyClass { const constant = 'constant value'; function showConstant() { echo self::constant . "\n"; } } class MyClass { public $constant = 'constant value'; function showConstant() { echo $this->constant . "\n"; } }
В чем основное отличие? Это точно так же, как определение варов, не так ли?
Константы постоянны (ничего себе, кто бы мог подумать об этом?) Они не требуют экземпляра класса. Таким образом, вы можете написать MyClass::CONSTANT
, например PDO::FETCH_ASSOC
. Свойству, с другой стороны, нужен класс, поэтому вам нужно будет написать $obj = new MyClass; $obj->constant
$obj = new MyClass; $obj->constant
.
Кроме того, существуют статические свойства, им также не нужен экземпляр ( MyClass::$constant
). И здесь разница заключается в том, что MyClass::$constant
может быть изменен, но MyClass::CONSTANT
не может.)
Таким образом, используйте константу, когда у вас есть скалярное значение без выражения, которое не будет изменено. Это быстрее, чем свойство, оно не загрязняет пространство имен свойств, и это более понятно любому, кто читает ваш код.
Определяя значение const
внутри класса, вы убедитесь, что оно не будет изменено намеренно или непреднамеренно.
Ну, если я делаю $myClass->constant = "some other value"
(учитывая, что $ myClass является экземпляром MyClass) в последнем примере, тогда значение больше не является постоянным. Там у вас есть разница. Значение константы не может быть изменено, потому что … оно постоянное.