【问题标题】:PHP function that calls itself always returns null调用自身的 PHP 函数总是返回 null
【发布时间】:2014-07-14 14:14:47
【问题描述】:

我已经搜索,研究,诅咒了很多,并反复对着我的电脑屏幕大喊,但似乎没有任何效果......

我创建了以下函数来查询 mysql 数据库的当前日期。如果数据库中不存在当前日期,则生成前几天的日期,并且该函数使用新日期再次调用自身。这将一直持续到找到匹配项,此时函数返回一个包含所需数据的数组。

function getWeekNumber($dateToQuery) {
    $oneDay = 86400;
    $timestamp = $dateToQuery;
    $stringDate = date("d/m/y", $dateToQuery);

    include("inc/dbconx.php");
    try {
        $STH = $DBH->prepare("SELECT `Week_Commencing`,`Week_Number` FROM weeks WHERE `Week_Commencing` = ?");
        $STH->bindParam(1,$stringDate);
        $STH->execute();
    } catch (Exception $e) {
        echo "There was a problem retrieving data from the database";
        exit;
    }

    $result = $STH->fetch(PDO::FETCH_ASSOC);

    if ($result == FALSE) {
        $prevDay = $timestamp - $oneDay;
        getWeekNumber($prevDay);
    } else {
        $output = array("Week_Commencing" => $result['Week_Commencing'], "Week_Number" => $result['Week_Number']);
        var_dump($output);
        return $output;
    }
}

$weekNumber = getWeekNumber($serverTime);
var_dump($weekNumber);

一切正常,你会看到我在哪里包含了 var_dumps 来检查结果……

函数的else子句中的var_dump按预期输出:

array(2) {
    ["Week_Commencing"]=> string(8) "19/05/14"
    ["Week_Number"]=> string(1) "4"
}

但是,当我调用该函数时,它总是返回 NULL。

有人知道为什么会这样吗?

提前致谢

【问题讨论】:

  • 我可以推荐 PAP - Professional Agressive Programming 吗?喊电脑只是入门级... :) 还有 ADD - Agression Driven Development。还有一所学校更喜欢升级而不是异常处理。
  • @hakre 哈哈干杯.. 我会调查的!

标签: php function null return


【解决方案1】:
return getWeekNumber($prevDay);
^^^^^^

如果没有return 语句,即使是递归调用,该函数也不会神奇地返回值。

【讨论】:

  • 我的人生圆满了!干杯哥们
【解决方案2】:

return 语句在 else 块中。它在$result 为真时执行。所以$result 似乎是错误的。总是。

【讨论】:

  • 在这种情况下,将没有var_dump,最终脚本会因堆栈溢出而死。
猜你喜欢
  • 1970-01-01
  • 2013-02-16
  • 2013-08-01
  • 2019-04-20
  • 2011-03-21
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2022-01-01
相关资源
最近更新 更多