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

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

WBOY
リリース: 2016-06-23 14:13:21
オリジナル
1104 人が閲覧しました

この投稿は、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;}
ログイン後にコピー


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

function newtripos($str,$findstr,$count,$off=0){
$pos=stripos($str,$findstr,$off);
if($) count>0 && $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;	}}?>	
ログイン後にコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート