Separating logic per class and being able to use dependency injection
Without knowing exactly what those classes are supposed to do, I assume it's supposed to work something like (new UserNewState( $this-&gt;userRepository ))-&gt;handle( $user );. That doesn't look that bad to me.

What other dependencies do you envision your separate State classes are going to need besides the repository?

But perhaps something like a UserStateHandlerFactory is something you could be looking for?

class UserStateHandlerFactory
{
  private $userRepository;

  public function __construct( UserRepository $userRepository ) {
    $this-&gt;userRepository = $userRepository;
  }

  public function create( User $user ) {
    switch ($user-&gt;state) {
        case 'new':
            return new UserNewState( $this-&gt;userRepository );
            break;
        case 'banned':
            return new UserBannedState( $this-&gt;userRepository );
            break;
        // ...
    }
  }
}

class UserStateManager
{
  private $userRepository;
  private $handlerFactory;

  public function __construct( UserRepository $userRepository, UserStateHandlerFactory $handlerFactory )
  {
    $this-&gt;userRepository = $userRepository;
    $this-&gt;handlerFactory = $handlerFactory;
  }

  public function handle()
  {
    $user = $this-&gt;userRepository-&gt;find(1);
    $this-&gt;handlerFactory-&gt;create( $user )
                         -&gt;handle( $user );
  }
}


However, I don't know if that makes things much cleaner though. It just looks like another layer of indirection; hiding away, what ultimately has to be done anyway: pass dependencies into the handlers.