Метод, который возвращает тип интерфейса. Как это вообще работает?
В примере ниже, метод makeInterviewer(): Interviewer возвращает тип интерфейса Interviewer.Этот метод ничего не возвращает, а только объявляет требования к наследникам - они должны реализовать этот абстрактный метод и уже вернуть конкретный объект, реализующий интерфейс Interviewer.

Соответственно, никакой магии тут нет, просто в вашем примере не хватает классов-наследников с конкретной реализацией.

interface Interviewer {
    public function askQuestions();
}

abstract class HiringManager {
    abstract public function makeInterviewer(): Interviewer;

    public function takeInterview() {
        $interviewer = $this->makeInterviewer();
        $interviewer->askQuestions();
    }
}

class TeamLead implements Interviewer {
  public function askQuestions() {
    ...
  }
}

class Boss extends HiringManager {
  public function makeInterviewer(): Interviewer {
    return new TeamLead();
  }
}

https://www.php.net/manual/ru/language.oop5.abstra...
Возвращает не "тип интерфейса", а должен возвращать объект класса реализующий интерфейс Interviewer.
Следовательно он точно должен содержать в себе метод askQuestions.
Вроде бы паттерн Strategy, но это не точно