static:: разрешает вызов к классу, который реально вызвали (late), а не к тому, где метод написан (self::).
Разбор
- Важно в наследуемых фабриках.
- self:: привязан к текущему классу.
- parent:: — к родителю.
- Пуганица self/static — частый баг.
Итог
static:: учитывает вызывающий класс в иерархии.