PHP生成器函数内部的错误处理

时间:2019-07-15 23:44:36

标签: php exception error-handling generator

相关:Error in PHP Generator

如何在不停止迭代的情况下在生成器函数中传播错误?

示例:

class SynchronizeSchedules extends \Symfony\Component\Console\Command\Command
{
    protected function execute(InputInterface $input, OutputInterface $output): void {
        $synchronizer = new \ScheduleSync();
        foreach ($synchronizer->sync() as $schedule) {
            $output->writeln("Schedule {$schedule->id} synchronized");
        }
    }
}

class ScheduleSync
{
    public function sync(): \Generator {
        $data = [/* data from somewhere */];

        foreach ($data as $d) {
            try {
                // insert into database
                $this->db->insert('...');
                yield $d;
            } catch (DBALException $e) {
                // something went wrong
            }
        }
    }
}

如果发生数据库错误(DBALException),我想做些事情。例如,在CLI命令(Symfony控制台)中,我想写入STDOUT。在Web应用程序中调用该错误时,将错误记录到文件或其他内容中更为合适。

除了将LoggerInterface对象传递给具有生成器方法的类之外,还有一种干净的方法来处理此问题吗?

0 个答案:

没有答案