frankx: Rückgabewerte und Fehlerbehandlung allgemein bzw. am Beispiel

Beitrag lesen

Hellihello Zusammen,

statt eine immerhin konventionell definierte Exception zu thrown, die ja im minimalen Falle "lediglich" die mitgeworfenen Nachricht der Funktion transportiert, wäre vermutlich das u.g. sowas wie eine selfmade-exception-handling, oder? Der Funktion eine eigene message-variable mitgeben, die sie im unerwünschten Falle mit einer entsprechenden Nachricht versähe?

Vermutlich muss man sich hier fragen, ob das gegenüber einer thrown Exception einen Vorteil hat. Immerhin muss der Funktion ja noch eine extra public-function sowie eine extra private-variable zugeordnet werden, wenn man das nicht ererben lassen möchte.

  
  
<?php  
/**  
 * File contains three classes (My_CSV_Reader, Test_View and Test_Control)  
 * to figure out cute error-handling/exception-handling  
 */  
  
/**  
 * Reads CSV file and converts it to list of hash  
 * if filepath does not exists or file cant be opened a message is set  
 */  
class My_CSV_Reader  
{  
 /**  
  * filepath of CSV file  
  */  
 private $file_path = "";  
  
 /**  
  * raw formatted table read from CSV  
  */  
 private $table_from_csv = array();  
  
 /**  
  * table as list of hash  
  */  
 private $table = array();  
  
 /**  
  * message if file cant be read  
  */  
 private $message = "";  
  
 function __construct ($file_path) {  
  
  // check if filepath exists  
  if (is_file($file_path)) {  
  
   // set paramter to local class var_dump  
   $this->file_path = $file_path;  
  
   // try if file can be read  
   if ($this->_get_CSV()) {  
    // let it be converted to list of hash  
    $this->_set_table();  
   }  
  } else { //set error message  
   $this->message = "Filepath $file_path does not exist";  
  }  
 }  
  
  /**  
  * sets class var table_from_csv if file can be read  
  * @return boolean  
  */  
 private function _get_CSV() {  
  if ($file_handle = fopen ($this->file_path,"r")) {  
   while ( ($this->table_from_csv[] = fgetcsv ($file_handle)) !== FALSE ) {}  
   fclose ($file_handle);  
   return true;  
  } else {  
   $this->message = "Sorry, could not open file ".$this->file_path." though it exists";  
   return false;  
  }  
 }  
  
  /**  
  * converts csv table format to list of hash  
  * @return boolean  
  */  
 private function _set_table() {  
  foreach ($this->table_from_csv as $row_nr => $row) {  
   if ($row_nr === 0 || !is_array($row)) continue;  
   foreach ($row as $col_nr => $cell_content) {  
    $my_row[$table_from_csv[0][$col_nr]] = $cell_content;  
   }  
   $this->table[] = $my_row;  
  }  
  return true;  
 }  
  
 /**  
  *  returns table (list of hash)  
  * @return array  
  */  
 public function get_table() {  
  return $this->table;  
 }  
  
 /**  
  *  returns table (list of hash)  
  * @return array  
  */  
 public function get_message() {  
  return $this->message;  
 }  
} //My_CSV_Reader  
  
  
/**  
 * checks if table was read properly and selects appropiate View  
 */  
class Test_Control  
{  
 function __construct()  
 {  
  $my_csv_reader =  new My_CSV_Reader("test.csv");  
  if ($my_csv_reader->get_table()) {  
   new My_View_Table($my_csv_reader->get_table());  
  } else {  
   new My_View_Error($my_csv_reader->get_message());  
  }  
 }  
} //Test_Control  
  
// Test it  
new Test_Control();  
  
// Simulate View class for test purpose  
class My_View_Error  
{  
 function __construct($message) {  
  echo "$message";  
 }  
}  

Dank und Gruß,

frankx

--
tryin to multitain  - Globus = Planet != Welt