递归函数返回null但在var dump上返回一个值

时间:2014-06-22 13:02:47

标签: php

我正在创建一个函数,它将根据输入的字符串返回一个slug,如果数据库中存在一个slug,它将附加一个数字 - $ num,我正在使用codeigniter,

当我死掉变量时,它会在_generate_slug上返回正确的slug,它会返回正确的值,但当我在index函数上死时它会返回空白;

这是我的功能

控制器/ test.php的

public function index()
{
  echo $this->_generate_slug('test');
}

protected function _generate_slug($string,$cntr = 0)
{
  if($cntr == 0){

        $slug = create_slug($string);

   }else{

        $slug = create_slug($string).'-'.$cntr;

   }   

   if($this->test_model->slug_exist($slug)){
        $cntr++;
        $this->_generate_slug($string,$cntr);

    }else{

        return $slug;  
    }    
}

助手/ test.php的

function create_slug($string)
{
    $slug = strtolower( $string );
    $slug = str_replace('&','and',$slug);
    $slug = preg_replace('/[%\'"``]/', '', $slug);
    $slug = preg_replace('/[^a-zA-Z0-9-]/','-',$slug);
    $slug = preg_replace("/[-]+/", "-", $slug);
    $slug = trim($slug, '-');

    return $slug;
}

1 个答案:

答案 0 :(得分:0)

您收到NULL,因为您没有在递归中返回值。它应该是:

return $this->_generate_slug($string,$cntr);

但是就像评论中提到的那样,你在这里使用递归是很奇怪的。

而且,我不熟悉CodeIgniter中的代码样式,但是以下划线开头命名受保护的方法似乎是一种不好的做法。