confirm($io)) { $io->info('Operation aborted'); return ExitCode::EXIT_SUCCESS; } return $this->doExecute($input, $io); } private function confirm(SymfonyStyle $io): bool { $io->warning($this->getWarningMessage()); return $io->confirm('Continue deleting visits?', false); } abstract protected function doExecute(InputInterface $input, SymfonyStyle $io): ?int; abstract protected function getWarningMessage(): string; }