2014-10-15 4 views
0

Я сделал функцию для показа сегодняшней даты или следующей даты рабочего дня, если это выходные. Функция работает отлично, но с возвратом что-то не так.PHP Что не так с рекурсивной функцией?

$today = todayDate('2014-10-18'); // Saturday 

    function todayDate($date) { 
     if(date('N', strtotime($date)) >= 6) { 
      echo 'If - ' . $date . '<br/>'; 
      $date = date('Y-m-d', strtotime('+1 day', strtotime($date))); 
      todayDate($date); 
     } else { 
      echo 'Else - ' . $date . '<br/>';    
     } 
     return $date; 
    } 

    echo '<br/><br/>Today: ' . $today . '<br/><br/>'; 

Эта функция повторяет следующее:

If - 2014-10-18 
If - 2014-10-19 
Else - 2014-10-20 

Но эхо $ сегодня (последняя строка в коде) является

Today: 2014-10-19 

Итак, что случилось? Последняя функция $ date in - «2014-10-20», и это значение возвращается к $ today, но сегодня $ $ показывает различное значение. Есть идеи?

+2

Функция строго говоря рекурсивным, но вы никогда не присвоить возвращаемое значение внутреннего вызова ни к чему. – kojiro

+0

Этот код ужасно неэффективен. Вы выполняете повторные обратные вызовы из строки -> timestamp-> string при каждом вызове. Почему бы вам просто не пропустить временную метку и почти все эти вызовы strtotime? –

ответ

1

Как указал kojiro в комментарии, вы не назначаете возвращаемое значение внутреннего вызова todayDate(). Чтобы это изменить, заменить эту строку

todayDate($date); 

с

$date = todayDate($date); 
+0

Это работает :-) Я стараюсь, чтобы эта функция проходила следующим образом TodayDate (2014-10-18)> if> date + 1 = 2014-10-19> todayDate (2014-10-19)> if> date + 1 = 2014-10-20> todayDate (2014-10-20)> else> return -> значение последней даты было 2014-10-20. $ date = todayDate ($ date) выходит из моей головы, но важно то, что он работает. Спасибо! – SilentCry

+0

Вы должны ознакомиться с концепцией возвращаемых значений функции. Рекурсивные функции могут привести к сложным ошибкам. – andy

+0

О, сегодня я посмотрел на эту функцию и ... У меня она есть :-D Спасибо – SilentCry

Смежные вопросы