如何在PHP,DateTime :: createFromFormat()上抛出异常?

And*_*dré 2 php exception

我是一个关于抛出Exceptions的新手,我在使用这个PHP基本方法时没有得到如何抛出异常,DateTime :: createFromFormat()

案例如下:

private function obtainMostRecentFile($fileNamesArray, $start, $lenght) {
    foreach ($fileNamesArray as $row) {
        $i++;
        $format = 'Ymd';
        $date = DateTime::createFromFormat($format, substr($row, $start, $lenght));
        $date_in_format[$i] = $date->format('Ymd');
    }
    return (max($date_in_format));
}
Run Code Online (Sandbox Code Playgroud)

我有这个方法,我需要找到一种方法,当DateTime::createFromFormat($format, substr($row, $start, $lenght));没有正确运行时抛出异常.

例如:

如果我调用$this->obtainMostRecentFile("GeoLiteCity_20101201.zip", 12, 8);该函数返回它们应该返回的输出.

如果我调用$this->obtainMostRecentFile("GeoLiteCity_201.zip", 12, 8);该函数返回输出Fatal error: Call to a member function format() on a non-object in C:\xampp\htdocs\testes\testecsv4.php on line 440.

Normaly我做这样的事情:

if (is_null($someVariable)) {
    throw new Exception("null variable");
}
Run Code Online (Sandbox Code Playgroud)

你能给我一些关于如何抛出Exception的线索DateTime::createFromFormat()吗?

最好的祝福,

Jon*_*Jon 6

DateTime::createFromFormat使用无效值调用时,它会重新启动false.false没有方法format,所以这是你的应用程序崩溃的地方:

$date_in_format[$i] = $date->format('Ymd');
Run Code Online (Sandbox Code Playgroud)

你应该在那之前加上一张支票:

$format = 'Ymd';
$date = DateTime::createFromFormat($format, substr($row, $start, $lenght));
if($date === false) {
    // throw an exception here!
}
$date_in_format[$i] = $date->format('Ymd');
Run Code Online (Sandbox Code Playgroud)