Ответ 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
.