Exception wird nicht ausgegeben

fanste

Erfahrenes Mitglied
Hallo,

ich stehe mal wieder vor einem Problem, welches ich bisher nicht gelöst bekommen habe. Ich arbeite in letzter Zeit viel mit OOP und Exceptions. Vor folgendem Problem stehe ich dabei:

PHP:
class test
{
  private static $config:
  private static $nextClass;
  
  public funtion __construct()
  {
     self:$config = new config();
     $this->irgendwas();
  }

  private function irgendwas()
  {
     ////   Exception wird geworfen
     $value =self::$config->get('value');
     self::$nextClass = new nextClass($value);
     ////   Exception wird zurückgehalten
     self::$nextClass = new nextClass(self::$config->get('value'));
  }

 [...]
}
PHP:
class config
{
  private $config:
  
  public funtion __construct()
  {
     // Werte aus der Datenbank holen und in $config speichern
  }

  public function get($key)
  {
    if(isset($this->config[$key]))
      return $this->config[$key];
            
    throw new SystemException('Config value not found! => '.$key);
  }

 [...]
}
Ich habe mal 2 kurze Beispiele gebastelt, welche mein Problem beschreiben. In der Function "irgendwas" der Klasse "test" steht alles, was mich beschäftigt. Bei der 1. Vaiante bekomme ich die Exception wie gewollt, wenn der Wert nicht existiert, bei der 2. nicht.

Gibt es da irgendeine Angabe zu machen, damit ich sie auch bei der direkten Verwendung dieses Funktionsaufrufes, ohne vorherige Zusweisung auf eine Variable, erhalte?


Danke für eure Hilfe.
 
Ich habe 2 Dinge:

1. Im Konstruktor von Klasse test fehlt hinter dem self ein Doppelpunkt.
2. Wo wird die Klasse SystemException definiert? Gibts die überhaupt? PHP kennt standardmäßig Exception und ErrorException. Du müsstest dir also eine von einer der beiden Standard-Exception-Klassen abgeleitete erstellen, die SystemException heißt.

Grüße
 
Hallo,

Danke für deine Antwort.

Zu 1.: Tippfehler. Hab das hier im Editor zusammengetippt, nicht aus meinem Code kopiert. ;)
Zu 2.: Hätte ich vielleicht explizit noch erwähnen sollen: Ja, die Klasse gibt es. Wird von mir via include eingebunden (Hättest du evt. "erraten" können, da ja die 1. Variante funktioniert)

Ich arbeite generell mit der Einstellung, dass mir alle Fehler angezeigt werden, solche "Kleinigkeiten" würde ich also finden.

Hat sonst noch jemand eine Idee?
 
Ich bin mir jetzt nicht ganz sicher, ob es das ist was du hören möchtest, aber...

When an exception is thrown, code following the statement will not be executed, and PHP will attempt to find the first matching catch block.

PHP:
<pre>
<?php
class nextClass
{
	public function __construct($msg)
	{
		echo $msg;
	}
}
class test
{
  static private $config;
  static private $nextClass;
  
  public function __construct()
  {
     self::$config = new config();
     $this->irgendwas();
  }

  private function irgendwas()
  {
     ////   Exception wird geworfen
     #$value =self::$config->get('value');
     #self::$nextClass = new nextClass($value);
     ////   Exception wird zurückgehalten
     self::$nextClass = new nextClass(self::$config->get('value'));
  }

}

class config
{
  private $config;
  
  public function __construct()
  {
     // Werte aus der Datenbank holen und in $config speichern
  }

  public function get($key)
  {
    if(isset($this->config[$key]))
      return $this->config[$key];
            
    throw new Exception('Config value not found! => '.$key);
  }

}

try 
{
	$test = new test;
}    
catch(Exception $e)
{
	echo $e->getMessage();
}


?>
</pre>
Exception wird geworfen...
 
Wenn man den Satz weiterließt, dann heißt es, dass eine Funktion herangezogen wird, die mittels set_exception_handler() definiert wurde, falls kein try/catch vorhanden ist. Das habe ich (hätte ich vielleicht erwähnen sollen ;) )
 
Zurück