2017-02-06 5 views
0

私はCarbon PHP DateTimeライブラリの助けを借りて再帰関数を書こうとしています。しかし、関数を実行すると戻り値はNULLになります。その前にエコーしても、正しくエコーされます。PHPの再帰関数はNULLを返します - Carbon PHPのライブラリ

再帰関数は、次に利用可能な曜日を検索しているため、土曜日と日曜日は6と0です。私は今のところ関数のためにそれをテストします。

すべての御助力がありがとうございます。

ありがとうございました。

$today = Carbon::now($timezone); 

$variable = check_next_day($today); 
var_dump($variable); //NULL 

function check_next_day($giventdate){ 

//var_dump ($giventdate->dayOfWeek); 
/*echo "<br>Holnapi nap:" . $giventdate->addDay(); 
echo "<br>Holnapi nap erteke:" . $giventdate->dayOfWeek; */ 
//echo gettype($giventdate->dayOfWeek); 


if (($giventdate->dayOfWeek == 1) || ($giventdate->dayOfWeek == 2)){ 
    //echo ("<br>IN loop:". $giventdate); 
    check_next_day($giventdate->addDay()); 
} else { 
    //echo "ELSE VAN?". $giventdate; // This returns the correct value 2017-02-08 19:44:46 
    return $giventdate; // This returns NULL 
} 
    //print_r (check_next_day($giventdate->addDay())); 
    //echo "WTF"; 

} 
+1

、あなたは**何も返しません**。これはあまり再帰的ではありません... –

+0

このように試しましたが、この場合はNULLも返されます。 $ giventdate-> dayOfWeekが1の場合、else文ではなくif文が実行されるため、giventdateに間違った値があります。 if(($ giventdate-> dayOfWeek!= 1)||($ giventdate-> dayOfWeek!= 2)){ \t \t echo( "
INループ:"。$ giventdate); \t \t return $ giventdate; \t \t \t}他{ \t \t check_next_day($ giventdate-> addDay()); \t} – beamkiller

+1

再帰的な方法では、実行可能なすべての実行分岐が最終的に* something *を返す必要があります。 PHPがデフォルトでnull(エラーを説明する)を返さない限り、エラーが発生すると思います。 – Carcigenicate

答えて

0

みんなありがとうは...たぶん私はあまりにも疲れている:あなたのif文の最初の分岐でD

function check_next_day($giventdate){ 

    if (($giventdate->dayOfWeek == 1) || ($giventdate->dayOfWeek == 2)){ 
     check_next_day($giventdate->addDay()); 
     return $giventdate; 
    } else { 
     return $giventdate; 
    } 
} 
関連する問題