В PHP, в чем разница между "final static" и "const"?

Я понимаю, что этот вопрос уже задан в другом месте для разных языков программирования... Но это не показатель 100% для того же ответа в домене PHP, поэтому я задаю этот вопрос.

Может кто-нибудь, пожалуйста, скажите мне, что конкретно, в PHP, есть разница между "final static" и "const"?

Ответ 1

final

методы или классы не могут быть изменены дочерним классом. Это предотвращает наследование классов, метод-переопределение и/или переопределение методов.

Определения классов и/или методы внутри класса могут быть определены как final.

static

Объявляет класс методы или свойства как статическое значение, так что у вас есть доступ к ним без создания экземпляра объекта. Они разделяются между родительским и дочерним классами.

Определение класса не может быть static в отличие от final.

const

Они создают постоянное значение для класса. Константные значения будут изменены и НЕ могут быть изменены методом в родительском или дочернем классе.

Константы класса выделяются на экземпляр класса.


const является спецификатором типа. Он не может быть помещен вместе с public/private/static и т.д. final, как упоминалось ранее, может использоваться вместе с любыми определениями методов или классов и, следовательно, применимы ко всем из них. static не может применяться к определениям классов, но может использоваться для свойств класса.

UPDATE

модификаторы разрешены для констант класса с PHP 7.1.0.

class Foo {
    public const bar = 5;
    private const baz = 6;
}

Подводя итог, final static не может использоваться для определения чего-то типа:

class X {
    final static x = 5;
}

поэтому у вас есть const.

Ответ 2

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

Ответ 3

У них нет вообще ничего общего, и они создают совершенно разные вещи. const объявляет константу. final static объявляет метод статический (может быть вызван без экземпляра класса) и final (не может быть переопределен подклассами). static может использоваться для определения переменной с классом, которая не является константой (но переменные не могут быть final).