首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

帮忙看下如何会返回null

2013-06-25 
帮忙看下怎么会返回null本帖最后由 snowlove 于 2013-06-17 18:27:34 编辑?phpfunction newtripos($str,$

帮忙看下怎么会返回null
本帖最后由 snowlove 于 2013-06-17 18:27:34 编辑

<?php
function newtripos($str,$findstr,$count,$off=0){
$pos=stripos($str,$findstr,$off);
$count--;
if($count>0 && $pos!=false){
$pos=newtripos($str,$findstr,$count,$pos+1);
}else{
var_dump($pos);
return $pos;
}
}
$a="456123456455654466";
$b=newtripos($a,'6',4);
var_dump($b);
?>


执行后显示$b是null。而在函数返回前,执行的var_dump($pos),显示是int(16)。
为什么var_dump($b)会是null?
[解决办法]
你使用了递归,return $pos; 在进入递归后会作用于 $pos=newtripos($str,$findstr,$count,$pos+1);
而你并没有在这个分支里对 $pos 作处理(也就是将结果返回到上一级递归)
我说的可能连我自己都不好理解,看代码:
function newtripos($str,$findstr,$count,$off=0){
    $pos=stripos($str,$findstr,$off);
    $count--;
    if($count>0 && $pos!=false){
        $pos=newtripos($str,$findstr,$count,$pos+1);
    }
    return $pos;
}

[解决办法]
差别大多了,因为没有去掉else时,相当于



<?php

if($count>0 && $pos!=false){
$pos=newtripos($str,$findstr,$count,$pos+1);
                return null;
}else{
var_dump($pos);
return $pos;
}
}
?>


而去掉else以后,则是



<?php

if($count>0 && $pos!=false){
$pos=newtripos($str,$findstr,$count,$pos+1);
                return $pos;
}else{
var_dump($pos);
return $pos;
}
}
?>

热点排行