class Author {
public function __constructor (private Book $book) {
}
}
Так и передается:
new Author(new Book())
— явно при создании
Если объект не бизнес сущность, а некоторый класс приложения, то обычно это не руками делается, а занимается этой работой некоторый служебный слой, некоторый контейнер, который за тебя разрулит как всю матрешку зависимостей создать и вложить друг в друга. Паттерн называется: DI Container