/** * Here we need to be able to add new functions to the call list * * @param array $functions */ public function addFunctionsAsMethods($functions) { foreach ($functions as $key => $function) { // do a reflection on the function interface $reflection = new Zend_Server_Reflection_Function(new ReflectionFunction($function)); // build up the method definition $definition = new Zend_Server_Method_Definition(); $definition->setName($key)->setCallback($this->_buildCallback($reflection))->setMethodHelp($reflection->getDescription())->setInvokeArguments($reflection->getInvokeArguments()); // here is where the parameters really get built up foreach ($reflection->getPrototypes() as $proto) { $prototype = new Zend_Server_Method_Prototype(); $prototype->setReturnType($this->_fixType($proto->getReturnType())); foreach ($proto->getParameters() as $parameter) { $param = new Zend_Server_Method_Parameter(array('type' => $this->_fixType($parameter->getType()), 'name' => $parameter->getName(), 'optional' => $parameter->isOptional())); if ($parameter->isDefaultValueAvailable()) { $param->setDefaultValue($parameter->getDefaultValue()); } $prototype->addParameter($param); } $definition->addPrototype($prototype); } // finally add the new function definition to the available call stack $this->_table->addMethod($definition, $key); } }
/** * Build a method signature * * @param Zend_Server_Reflection_Function_Abstract $reflection * @param null|string|object $class * @return Zend_Server_Method_Definition * @throws Zend_Server_Exception on duplicate entry */ protected function _buildSignature(Zend_Server_Reflection_Function_Abstract $reflection, $class = null) { $ns = $reflection->getNamespace(); $name = $reflection->getName(); $method = empty($ns) ? $name : $ns . '.' . $name; if (!$this->_overwriteExistingMethods && $this->_table->hasMethod($method)) { #require_once 'Zend/Server/Exception.php'; throw new Zend_Server_Exception('Duplicate method registered: ' . $method); } $definition = new Zend_Server_Method_Definition(); $definition->setName($method)->setCallback($this->_buildCallback($reflection))->setMethodHelp($reflection->getDescription())->setInvokeArguments($reflection->getInvokeArguments()); foreach ($reflection->getPrototypes() as $proto) { $prototype = new Zend_Server_Method_Prototype(); $prototype->setReturnType($this->_fixType($proto->getReturnType())); foreach ($proto->getParameters() as $parameter) { $param = new Zend_Server_Method_Parameter(array('type' => $this->_fixType($parameter->getType()), 'name' => $parameter->getName(), 'optional' => $parameter->isOptional())); if ($parameter->isDefaultValueAvailable()) { $param->setDefaultValue($parameter->getDefaultValue()); } $prototype->addParameter($param); } $definition->addPrototype($prototype); } if (is_object($class)) { $definition->setObject($class); } $this->_table->addMethod($definition); return $definition; }
public function testConstructorShouldSetObjectStateFromPassedOptions() { $type = 'string'; $name = 'foo'; $optional = true; $defaultValue = 'bar'; $description = 'Foo bar!'; $options = compact('type', 'name', 'optional', 'defaultValue', 'description'); $parameter = new Zend_Server_Method_Parameter($options); $test = $parameter->toArray(); $this->assertEquals($options, $test); }