/** * @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; }