2010-12-23 21 views
1

我在拋出異常新手,我沒有得到如何使用這個PHP基礎方法時拋出一個異常,日期:: createFromFormat()我如何在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

Normaly我做這樣的事情:

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

你能給我如何拋出的異常的一些線索的DateTime::createFromFormat()

最好的問候,

回答

6

DateTime::createFromFormat被調用無效值,它returs falsefalse沒有一個方法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'); 
+1

感謝您的回覆。它解決了我的問題!非常感謝! – 2010-12-23 13:49:09

2

在你的情況,當DateTime::createFromFormat不正確運行它返回的東西是不是一個對象(可能布爾false)。檢查變量並拋出異常,如果它不是一個目標

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

這個回答是一個有效的了。我也測試過了。非常感謝! – 2010-12-23 13:49:40