Php 使用控制器内部功能的codeigniter

Php 使用控制器内部功能的codeigniter,php,codeigniter,function,controller,Php,Codeigniter,Function,Controller,由于某些原因,我无法在停止后运行change()函数和所有操作。我尝试使用$this->change(),但效果相同。如果我在一个php文件中运行这个函数,它的工作状态和num会发生变化 class Test extends CI_Controller { function __construct(){ parent::__construct(); } public function home(){ $num = 1;

由于某些原因,我无法在停止后运行
change()
函数和所有操作。我尝试使用
$this->change()
,但效果相同。如果我在一个php文件中运行这个函数,它的工作状态和num会发生变化

class Test extends CI_Controller {

    function __construct(){
        parent::__construct();
    }

    public function home(){

        $num = 1;

        change($num);


        function change($num,$rand=false){

            echo 'inside function'; // this is not shown

            if($num < 4) {
                $rand = rand(1,9);
                $num = $num.$rand;
                change($num,$rand);
            } else {
                echo $num;
            }
        }
        echo 'done'; // this is not shown

    }

}
类测试扩展CI_控制器{
函数_u构造(){
父项::_构造();
}
公共功能之家(){
$num=1;
变动(单位:元);
函数更改($num,$rand=false){
echo“inside function”;//未显示此项
如果($num<4){
$rand=兰特(1,9);
$num=$num.$rand;
更改($num,$rand);
}否则{
echo$num;
}
}
echo'done';//未显示此项
}
}

lol,您正在尝试在函数中编写函数

尝试使用此代码运行类

class Test extends CI_Controller {

    function __construct(){
        parent::__construct();
    }

    public function home(){

        $num = 1;

        $this->change($num);
        echo 'done'; // this is not shown

    }

    public function change($num,$rand=false){

            echo 'inside function'; // this is not shown

            if($num < 4) {
                $rand = rand(1,9);
                $num = $num.$rand;
                change($num,$rand);
            } else {
                echo $num;
            }
    }

}
类测试扩展CI_控制器{
函数_u构造(){
父项::_构造();
}
公共功能之家(){
$num=1;
$this->change($num);
echo'done';//未显示此项
}
公共函数更改($num,$rand=false){
echo“inside function”;//未显示此项
如果($num<4){
$rand=兰特(1,9);
$num=$num.$rand;
更改($num,$rand);
}否则{
echo$num;
}
}
}

调用私有或公共函数来处理数据(或对于更复杂/涉及的过程,调用库)可能会更好

类测试扩展CI_控制器
{
公共函数构造()
{
父项::_构造();
}
公共功能之家()
{
$num=1;
echo$this->\u更改($num);
echo'done';//未显示此项
}
//私有或公共是不带下划线的
//最好使用private,这样CI就不会路由到此函数
私有函数更改($num,$rand=FALSE)
{
如果($num<4){
$rand=兰特(1,9);
$num=$num+$rand;
$this->\更改($num,$rand);
}否则{
返回$num;
}
}
}

如果您要否决投票,请给出原因。num是否应该是浮点int类型?使用“.”不会使字符串连接发生这种情况,只需将函数带到外部。。。。它将像一个符咒一样工作。这是一个更好的实现。我更新了代码,因为您使用的是递归。请确保您的函数实际上是通过在else子句中使用die()或var_dump来创建堆栈的。
class Test extends CI_Controller
{
  public function __construct()
  {
      parent::__construct();
  }

  public function home()
  {
    $num = 1;

    echo $this->_change($num);
    echo 'done'; // this is not shown
  }

  // private or public is w/o the underscore
  // its better to use private so that CI doesn't route to this function
  private function _change($num, $rand = FALSE)
  {
        if($num < 4) {
            $rand = rand(1,9);
            $num = $num + $rand;
            $this->_change($num,$rand);
        } else {
            return $num;
        }
  }
}