开发者

How can I throw exception on PHP, DateTime::createFromFormat()?

开发者 https://www.devze.com 2023-02-01 12:05 出处:网络
I\'m a newbie on throwing Exceptions and I\'m not getting how to throw an Exception when using this PHP base method, DateTime::createFromFormat()

I'm a newbie on throwing Exceptions and I'm not getting how to throw an Exception when using this PHP base method, DateTime::createFromFormat()

The case is the following:

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));
}

I have this method, and I need to find a way of throwing an Exception when the DateTime::createFromFormat($fo开发者_运维知识库rmat, substr($row, $start, $lenght)); does not run correctly.

For example:

If I call $this->obtainMostRecentFile("GeoLiteCity_20101201.zip", 12, 8); the function return the output that they should return.

If I call $this->obtainMostRecentFile("GeoLiteCity_201.zip", 12, 8); the function return the output Fatal error: Call to a member function format() on a non-object in C:\xampp\htdocs\testes\testecsv4.php on line 440.

Normaly I do something like this:

if (is_null($someVariable)) {
    throw new Exception("null variable");
}

Can you give me some clues on how to thrown Exception for the DateTime::createFromFormat() ?

Best regards,


When DateTime::createFromFormat is called with an invalid value, it returs false. false does not have a method format, so this is where your app breaks down:

$date_in_format[$i] = $date->format('Ymd');

You should include a check before that:

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


In your case when DateTime::createFromFormat is not run correctly it returns something that is not an object (probably boolean false). Check that variable and throw Exception if it's not an object

$date = DateTime::createFromFormat($format, substr($row, $start, $lenght)); 
if (!is_object($date)) { // or $date === false
    throw new Exception('DateTime::createFromFormat error');
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号