Почему объявленные классом константы нужно извлекать статически? - PullRequest
1 голос
/ 08 октября 2010
class foo 
{
    const bar;
}

и для доступа к нему мы должны сделать: self::bar; а не, $this->bar;

Это правильно?Если так, то почему?

Ответы [ 3 ]

6 голосов
/ 08 октября 2010

Да, это правильно. Причина в том, что константа привязана к классу, тогда как свойство привязано к экземпляру, поэтому нет смысла обращаться к ней через ссылку. Независимо от того, сколько экземпляров вы создадите, всегда будет только один foo :: bar const.

Это просто решение по языку, когда невозможно получить доступ к const через ссылку, хотя, например, в Java вы действительно можете получить доступ к статическому финальному свойству через ссылку, но обычно вы получите предупреждение компилятора.

2 голосов
/ 08 октября 2010

Что ж, поскольку они являются константами, это означает, что они являются статическими (константы и статические являются синонимами), а также нет смысла иметь их для каждого экземпляра, если они никогда не меняются, поэтому вы имеете их для каждого класса. Статические члены доступны с ::.

1 голос
/ 08 октября 2010

Следует отметить, что до сих пор не было замечено, что константы могут содержать только примитивные значения. Они также не могут быть изменены после их установки, попытка установить значение после его уже объявленного значения приведет к parse error.

По сути, вы должны использовать константы только тогда, когда ваше свойство необходимо для каждого экземпляра класса, и, конечно, если это необходимо исправить.

...