ホームページ >バックエンド開発 >PHPチュートリアル >null が返される理由を調べるのを手伝ってください。

null が返される理由を調べるのを手伝ってください。

WBOY
WBOYオリジナル
2016-06-23 14:13:211139ブラウズ

この投稿は、snowlove によって最終編集されました: 2013-06-17 18:27:34

<?phpfunction 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;}


あなたのコードは次のとおりです。大丈夫。

4f3eaa845b790585976c58dcee6f17160 && $pos!=false){
正しく。実行を続ける場合は、関数を終了して $ POS を返す必要があります
Return $ POS; // ここで $ POS の値を返す必要があります。
}
}
$a="456123456455654466";
$b=newtripos($a,'6',4); //しかし、なぜ $b は $pos を受け取らないのでしょうか?
var_dump($b) ;
?>

else ボディを削除する場合と削除しない場合に大きな違いはありますか?

else ボディを削除しないと、それは

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

と同等になるため、その差はさらに大きくなります。他の体、それは


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


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。