Php 递归函数返回null,但在var dump上返回一个值
我正在创建一个函数,它将根据输入的字符串返回一个slug,如果数据库中存在slug,它将附加一个带-$num的数字,我使用的是codeigniter 当我关闭变量时,它在_generate_slug上返回正确的slug,它返回正确的值,但当我关闭索引函数时,它返回空白 这是我的函数 controllers/test.phpPhp 递归函数返回null,但在var dump上返回一个值,php,Php,我正在创建一个函数,它将根据输入的字符串返回一个slug,如果数据库中存在slug,它将附加一个带-$num的数字,我使用的是codeigniter 当我关闭变量时,它在_generate_slug上返回正确的slug,它返回正确的值,但当我关闭索引函数时,它返回空白 这是我的函数 controllers/test.php public function index() { echo $this->_generate_slug('test'); } protected functio
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;
}
}
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;
}
helpers/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;
}
}
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;
}
您得到的是
NULL
,因为您在递归中没有返回值。应该是:
return $this->_generate_slug($string,$cntr);
但正如评论中提到的,这里使用递归很奇怪
此外,我不熟悉CodeIgniter中的代码样式,但以下划线开头命名受保护的方法似乎是一种不好的做法。为什么需要使用递归?在学术界以外,我通常认为没有理由这样做。你有没有试过反复这样做来排除这种可能性?