protected function doScan(Scanner $scanner) { $s_copy = clone $scanner; foreach ($this->parsers as $parser) { if (!($parser->trigger($s_copy) && ($scan = $parser->scan($s_copy)))) { return false; } } $scanner->updateToMatch($s_copy); return true; }