Как я могу бросить исключение на PHP, DateTime :: createFromFormat ()? - PullRequest
2 голосов
/ 23 декабря 2010

Я новичок в создании исключений и не понимаю, как создавать исключения при использовании этого базового метода 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));
}

У меня есть этот метод, и мне нужно найти способ вызвать исключение, когда 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.

Обычно я делаю что-то вроде этого:

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

Можете ли вы дать мне несколько подсказок о том, как бросить Исключение для DateTime::createFromFormat()?

С уважением,

Ответы [ 2 ]

6 голосов
/ 23 декабря 2010

Когда DateTime::createFromFormat вызывается с недопустимым значением, оно возвращается false.false не имеет метода format, поэтому ваше приложение ломается:

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

Перед этим необходимо включить проверку:

$format = 'Ymd';
$date = DateTime::createFromFormat($format, substr($row, $start, $lenght));
if($date === false) {
    // throw an exception here!
}
$date_in_format[$i] = $date->format('Ymd');
2 голосов
/ 23 декабря 2010

В вашем случае, когда DateTime::createFromFormat работает неправильно, он возвращает что-то, что не является объектом (вероятно, логическое false). Проверьте эту переменную и выведите Exception, если это не объект

$date = DateTime::createFromFormat($format, substr($row, $start, $lenght)); 
if (!is_object($date)) { // or $date === false
    throw new Exception('DateTime::createFromFormat error');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...