/** * Declares a function * * @param string $name the name (empty for anonymous functions) * @param array $params an array of PC_Obj_Parameter * @param PC_Obj_MultiType $return the return type */ public function declare_function($name, $params, $return) { $func = new PC_Obj_Method($this->get_file(), $this->get_last_function_line(), true); if ($name == '') { $func->set_anonymous(true); $func->set_name(PC_Obj_Method::ANON_PREFIX . $this->anon_id++); } else { $func->set_name($name); } foreach ($params as $param) { $func->put_param($param); } if ($return !== null) { $func->set_return_type($return); } $this->parse_method_doc($func); $this->env->get_types()->add_functions(array($func)); }
/** * Builds a PC_Obj_Method from the given row * * @param array $row the row from db * @return PC_Obj_Method the method */ private function build_func($row) { $c = new PC_Obj_Method($row['file'], $row['line'], $row['class'] == 0, $row['id'], $row['class']); $c->set_name($row['name']); $c->set_visibility($row['visibility']); $c->set_abstract($row['abstract']); $c->set_static($row['static']); $c->set_anonymous($row['anonymous']); $c->set_final($row['final']); $c->get_version()->set(unserialize($row['min_version']), unserialize($row['max_version'])); foreach (unserialize($row['params']) as $param) { $c->put_param($param); } list($hasretdoc, $rettype) = unserialize($row['return_type']); $throws = unserialize($row['throws']); if (is_array($throws)) { foreach ($throws as $class => $type) { $c->add_throw($class, $type); } } $c->set_has_return_doc($hasretdoc); $c->set_return_type($rettype); return $c; }