| 
<?phpnamespace eMacros\Runtime\Builder;
 
 use eMacros\Applicable;
 use eMacros\Scope;
 use eMacros\GenericList;
 
 class InstanceBuilder implements Applicable {
 /**
 * Creates a new instance from a string
 * Usage: (instance _class (array 1 2 3))
 * Returns: object
 * (non-PHPdoc)
 * @see \eMacros\Applicable::apply()
 */
 public function apply(Scope $scope, GenericList $arguments) {
 if (count($arguments) == 0) {
 throw new \BadFunctionCallException("InstanceBuilder: No arguments found.");
 }
 
 $class = $arguments[0]->evaluate($scope);
 
 if (!is_string($class)) {
 throw new \InvalidArgumentException(sprintf("InstanceBuilder: Expected string as first argument but %s was found instead.", gettype($class)));
 }
 
 //get additional arguments
 $list = array_slice($arguments->getArrayCopy(), 1);
 $args = array();
 
 //build constructor parameters
 foreach ($list as $el) {
 $args[] = $el->evaluate($scope);
 }
 
 $rc = new \ReflectionClass($class);
 return empty($args) ? $rc->newInstance() : $rc->newInstanceArgs($args);
 }
 }
 ?>
 |