public function visit($data)
{
if (!is_object($data)) {
throw new Exceptions\InvalidTypeException($data);
}
$checkedClassNames = array();
$className = get_class($data);
do {
$checkedClassNames[] = $className;
if (isset($this->visitors[$className])) {
return $this->visitors[$className]->visit($this->outputVisitor, $this->outputGenerator, $data);
}
} while ($className = get_parent_class($className));
throw new Exceptions\NoVisitorFoundException($checkedClassNames);
}
/** * Visit struct returned by controllers. * * Can be called by sub-visitors to visit nested objects. * * @param object $data * * @return mixed */ public function visitValueObject($data) { $this->valueObjectVisitorDispatcher->setOutputGenerator($this->generator); $this->valueObjectVisitorDispatcher->setOutputVisitor($this); return $this->valueObjectVisitorDispatcher->visit($data); }