Sven Rautenberg: Rückgabewert von new()

Beitrag lesen

Moin!

die Zeile $pdo = new MySQL_PDO(array('base' => 'gibtsnich')); liefert mir ein

// print_r($pdo);
MySQL_PDO Object
(
)


>   
> auch dann, wenn eine PDOException auftritt, die ich in einer globalen Variablen $EVE festhalten möchte (Testfall: Unbekannte Datenbank).  
>   
> Es ist leider nicht so, dass des Konstruktors return-Value zurückgegeben wird, mein Konstruktor sieht so aus:  
  
Deine OOP-Struktur ist kaputt. Behebe die strukturellen Probleme. Das gesagte gilt für PHP und Perl.  
  

> ~~~php
  

> 	public function __construct($cfg = array()){  
> 		global $EVE;  
> 		try{  
> 			$this->dbh($cfg);  
> 			return 1;  
> 		}  
> 		catch(PDOException $e){  
> 			$EVE = $e->getMessage();  
> 			return;  
> 		}  
> 	}  
> 

Dein Konstruktor verlangt als Parameter nach einem Array mit Konfigurationsdaten, um damit dann eine Datenbankverbindung zu eröffnen - eventuell tritt dabei eine Exception auf.

Der Fehler ist, nach etwas zu fragen, was nicht benötigt wird: Ein Array mit Konfigurationsdaten. Was du benötigst, ist an dieser Stelle eine DB-Connection. Frage danach. Die Factory, aus die das Objekt herauskommt, ist dafür zuständig, die Connection herzustellen und funktionsfertig an dieser Stelle zu übergeben.

Wenn du willst, dass dein Konstruktionsversuch an dieser Stelle scheitert, lass das Try/Catch weg. Die Exception wird zuverlässig verhindern, dass eine Instanz der Klasse MySQL_PDO entsteht.

- Sven Rautenberg