调用嵌套函数php codeigniter

时间:2014-04-11 15:48:29

标签: php function codeigniter nested-function

我正在尝试拨打其他function下的nested function作为例子:

function _get_stats() {
    function _get_string() {
        $string = 'Nested Function Not Working';
        return $string;
    }
 }

 public function index() {
    $data['title'] = $this->_get_stats() . _get_string();
    $this->load->view('home', $data);
 }

现在,当我在网页浏览器blank中运行页面时,会显示。

任何建议或帮助对我都有很大帮助..提前感谢

2 个答案:

答案 0 :(得分:1)

该函数并非真正嵌套,但调用_get_stats()将导致_get_string被声明。 PHP中没有嵌套函数或类。

调用_get_stats()两次或更多次会导致错误,说明函数_get_string()已经存在且无法重新声明。

_get_string()之前调用_get_stats()会引发错误,指出函数_get_string()不存在。

在您的情况下,如果您真的想这样做(这是一种不好的做法),请执行以下操作:

protected function _get_stats() {
    if (!function_exists("_get_string")){
        function _get_string() {
            $string = 'Nested Function Not Working';
            return $string;
        }
    }
}

public function index() {
    $this->_get_stats(); //This function just declares another global function.
    $data['title'] = _get_string(); //Call the previously declared global function.
    $this->load->view('home', $data);
}

<强> BUT 您正在寻找的可能是method chaining。在这种情况下,您必须返回一个包含所需函数的有效对象。

示例:

protected function getOne(){
  //Do stuff
  return $this ;
}

protected function getTwo(){
  //Do stuff ;
  return $this ;
}

public function index(){
  $this
    ->getOne()
    ->getTwo()
  ;
}

答案 1 :(得分:1)

如果您有空白页面,则可能是500“服务器错误”响应,即PHP代码中的致命错误。

当PHP执行到达其声明时,

_get_string将被定义,即在_get_stats执行此声明时。

index()中,_get_string可能在您调用时尚未声明。

尽管在全局命名空间中定义了嵌套函数(例如与JS相反),但您可能希望移动_get_string声明。