예제 #1
0
 /**
  * @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;
 }