/** * @param Annotations\Constructor $constr * @param Builder $builder */ private function addConstructor(Annotations\Constructor $constr, Builder $builder) { $cb = $builder->constructor(); foreach ($constr->args as $name => $arg) { $this->addField($name, $arg->type, $arg->count, $cb); } }
/** * @param \ReflectionClass $refl * @param Builder $builder * @return object * @throws SampleException */ private function constructObject(\ReflectionClass $refl, Builder $builder) { $constructor = $refl->getConstructor(); $obj = null; if (null === $constructor || $constructor->getNumberOfParameters() === 0) { $obj = $refl->newInstance(); } elseif ($constructor) { if (!$builder->hasConstructor() && $constructor->getNumberOfRequiredParameters() === 0) { $obj = $refl->newInstance(); } elseif ($builder->hasConstructor()) { $args = $this->alignArgs($constructor, $this->sample($builder->constructor()), $builder->constructor()); $obj = $refl->newInstanceArgs($args); } } if (null === $obj && !$builder->isStrict()) { $obj = $refl->newInstanceWithoutConstructor(); } elseif (null === $obj) { throw new SampleException("Constructor required for constructing {$builder->getClass()} in strict mode"); } return $obj; }