Чем отличаются self::, parent:: и static:: в PHP?
Проще объяснить на примере:class A {
  public static function getValSelf()
  {
  	return new self();
  }

  public static function getValStatic()
  {
  	return new static();
  }
}

Class B extends A {
}

var_dump(get_class(B::getValSelf())); // 'A'
var_dump(get_class(B::getValStatic())); // 'B'
Позднее связывание — это значит привязка будет происходит не на этапе компиляции кода, а на этапе его исполнения.
В примере Кирилл Арутюнов это видно — self всегда указывает на тот класс, в котором оно объявлено, а static — на класс в котором он по факту будет вызван с учетом всех наследований.