php 在我发送"8"作为参数时耍花招



我不明白我的代码是怎么回事)))也许我只是需要更多的经验,但是...让我们进入正题:

写了一个函数,它为我的系统返回一个带有一些统计数据的数组,我所需要的只是将参数指定为 Year、M、D。如果我发送类似 getStatData(2016,07,07) 的东西 - 工作正常,但就像我发送带有数字 8 的东西一样 - 它失败了!例如:getStatData(2016,07,08)当然我有一个 fn 需要的文件,更多 如果将参数指定为字符串('2016'、'07'、'08'),它可以正常工作;但这并不酷:D

该函数:

function getStatData($y,$m,$d=false){
if(isset($y) && is_numeric($y) && isset($m) && is_numeric($m)){
    $m=($m<10)? '0'.$m : $m;
    if(isset($d)){
        $d=($d<10)? '0'.$d : $d;
        $y= 'days/'.$y;         
        $data = file_get_contents(STATDIR.'/'.$y.'/'.$m.'_'.$d.'.json');
    }
    else {      
        $data = file_get_contents(STATDIR.'/'.$y.'_'.$m.'.json');
    }
    return json_decode($data, true);
}
    else return false;
}

叫。。。

    print_r(getStatData(2016,07,08)); //call with 08

错误:file_get_contents(核心/统计/天数/2016/07_00.json):无法打开流:没有此类文件或目录

带有零前缀的数字是八进制文字,而不是零填充的十进制整数。似乎无效的八进制在 PHP 5 中被默默地视为0。您应该传入7并在您提供的示例中传递8

在 PHP 7 中,你会得到一个解析错误。 例如 Parse error: Invalid numeric literal in php shell code on line 1 .

将参数作为字符串传递,如 print_r(getStatData('2016','07','08'));

作为旁注,使用 str_pad() 函数将月份和日期格式化为 2 位数字值。相反,如果 isset($d) 使用 if($d)

function getStatData($y,$m,$d=false){
    if(isset($y) && is_numeric($y) && isset($m) && is_numeric($m)){
        // use str_pad
        $m=str_pad($m, 2, '0', STR_PAD_LEFT);
        if($d){
            // use str_pad
            $d=str_pad($d, 2, '0', STR_PAD_LEFT);
            $y= 'days/'.$y;
            $data = file_get_contents(STATDIR.'/'.$y.'/'.$m.'_'.$d.'.json');
        }
        else {
            $data = file_get_contents(STATDIR.'/'.$y.'_'.$m.'.json');
        }
        return json_decode($data, true);
    }
    else return false;
}
print_r(getStatData('2016','07','08'));

相关内容

  • 没有找到相关文章