PHP递归函数有什么问题?

PHP递归函数有什么问题?,php,Php,我做的功能是显示今天的日期或下一个工作日的日期,如果是周末。函数工作得很好,但返回是错误的 $today = todayDate('2014-10-18'); // Saturday function todayDate($date) { if(date('N', strtotime($date)) >= 6) { echo 'If - ' . $date . '<br/>'; $date = date(

我做的功能是显示今天的日期或下一个工作日的日期,如果是周末。函数工作得很好,但返回是错误的

$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/>';
但$today(代码的最后一行)的回声是


那么,怎么了?函数中的最后一个$date是“2014-10-20”,该值返回到今天的$date,但今天的$date显示不同的值。有什么想法吗?

正如kojiro在评论中指出的,您没有将内部调用的返回值分配给
todayDate()
。要更改此项,请更换此行

todayDate($date);


严格来说,这个函数是递归的,但是你从来不给任何东西分配内部调用的返回值,这段代码的效率非常低。在每次通话中,您都会从字符串->时间戳->字符串重复往返。你为什么不直接传递时间戳和几乎所有的strotime调用呢?它是有效的:-)我认为这个函数是这样运行的: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)从我的脑海中消失了,但重要的是,它能起作用。非常感谢。您应该熟悉函数返回值的概念。递归函数会导致复杂的错误。哦,今天我看了这个函数,然后。。。我有,谢谢
Today: 2014-10-19
todayDate($date);
$date = todayDate($date);