2017-02-06 39 views
0

Im пытается написать рекурсивную функцию с помощью библиотеки DateTime Carbon PHP. Но если я запустил функцию, возвращаемое значение будет NULL, даже если перед этим я его эхо-эхо, и оно будет правильно отражено.Функция рекурсии PHP возвращает NULL - Углеродная библиотека 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, потому что если $ giventdate-> dayOfWeek равно 1, он запускает оператор if, а не else. if (($ giventdate-> dayOfWeek! = 1) || ($ giventdate-> dayOfWeek! = 2)) { \t \t echo ("
IN loop:". $ Giventdate); \t \t return $ giventdate; \t \t \t} еще { \t \t check_next_day ($ giventdate-> addDay()); \t} – beamkiller

+1

В рекурсивном методе каждая возможная ветвь выполнения должна в конечном итоге возвращать * something *. Если PHP не по умолчанию и не возвращает null (что объясняет ошибку), я ожидаю, что это вызовет ошибку. – Carcigenicate

ответ

0

Спасибо, ребята ... Может быть, я слишком устал: D

function check_next_day($giventdate){ 

    if (($giventdate->dayOfWeek == 1) || ($giventdate->dayOfWeek == 2)){ 
     check_next_day($giventdate->addDay()); 
     return $giventdate; 
    } else { 
     return $giventdate; 
    } 
}