I know this is the time of the log since the question was asked, but for those who need an answer, I suggest the following:
1) Try to avoid inheritance overlay, unless you are 100% sure what you need.
2). In this example, the best setup would look something like this: you have a CreatureBundle , which consists mainly of abstract classes and interfaces. To make each package of descendants depends on the CreatureBundle and implement each Creature special code with these abstract classes and interfaces in the CreatureBundle .
Based on personal experience, I can say that dependency management is much easier than managing inheritance issues if something goes wrong. If you ever need to change the ancestral binding logic, you will save time by not digging through the inherited code and not changing the same logic in each descendant stream.
Edit: Although my suggestions may lead to a closer connection and are largely contrary to the latest Symfony best practice guide (which says that “the only package for each application” is the best practice), in the end you will understand that this approach will end up simplifies code maintenance.
source share