帮忙看下怎么会返回null
本帖最后由 snowlove 于 2013-06-17 18:27:34 编辑
执行后显示$b是null。而在函数返回前,执行的var_dump($pos),显示是int(16)。
为什么var_dump($b)会是null?
<?php<br>function newtripos($str,$findstr,$count,$off=0){<br> $pos=stripos($str,$findstr,$off);<br> $count--;<br> if($count>0 && $pos!=false){<br> $pos=newtripos($str,$findstr,$count,$pos+1);<br> }else{<br> var_dump($pos);<br> return $pos;<br> }<br>}<br>$a="456123456455654466";<br>$b=newtripos($a,'6',4);<br>var_dump($b);<br>?> 执行后显示$b是null。而在函数返回前,执行的var_dump($pos),显示是int(16)。
为什么var_dump($b)会是null?
分享到:
------解决方案--------------------
你使用了递归,return $pos; 在进入递归后会作用于 $pos=newtripos($str,$findstr,$count,$pos+1);
而你并没有在这个分支里对 $pos 作处理(也就是将结果返回到上一级递归)
我说的可能连我自己都不好理解,看代码:
------解决方案--------------------
差别大多了,因为没有去掉else时,相当于
而去掉else以后,则是
------解决方案--------------------
你使用了递归,return $pos; 在进入递归后会作用于 $pos=newtripos($str,$findstr,$count,$pos+1);
而你并没有在这个分支里对 $pos 作处理(也就是将结果返回到上一级递归)
我说的可能连我自己都不好理解,看代码:
function newtripos($str,$findstr,$count,$off=0){<br> $pos=stripos($str,$findstr,$off);<br> $count--;<br> if($count>0 && $pos!=false){<br> $pos=newtripos($str,$findstr,$count,$pos+1);<br> }<br> return $pos;<br>}------解决方案--------------------
差别大多了,因为没有去掉else时,相当于
<br><br><?php<br><br> if($count>0 && $pos!=false){<br> $pos=newtripos($str,$findstr,$count,$pos+1);<br> return null;<br> }else{<br> var_dump($pos);<br> return $pos;<br> }<br>}<br>?> <br>而去掉else以后,则是
<br><br><?php<br><br> if($count>0 && $pos!=false){<br> $pos=newtripos($str,$findstr,$count,$pos+1);<br> return $pos;<br> }else{<br> var_dump($pos);<br> return $pos;<br> }<br>}<br>?> <br>









