php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.06.2006, 21:34  
Neuer Benutzer
 
Registriert seit: 06.06.2006
Beiträge: 5
black_panther
Standard Instanzierung einer neuen Exception-Klasse

Hallo,

ich hab zur Uebung eigene Exception-Klassen gemaess einer Vorlage im Buch 'Webseiten programmieren und gestalten', erschienen im Verlag Galileo Computing, erstellt:

Code:
<?php

class DatabaseException
{
	private $intErrNo;
	private $strError;
	
	function __construct($intErrNo,$strError)
	{
		$this->$intErrNo = $intErrNo;
		$this->$strError = $strError;
	}
	
	function getNumber()
	{
		return $this->$intErrNo;
	}
	
	function getMessage()
	{
		return $this->$strError;
	}
}

?>
Sobald ich die Klasse mit
Code:
throw new DatabaseException(mysql_errno(),'...
Fehlerbeschreibung: '.mysql_error());
instanziere, erhalte ich folgende Fehlermeldung:

Zitat:
Fatal error: Exceptions must be valid objects derived from the Exception base class ...
Was hat das zu bedeuten? Wenn ich das sinngemaess uebersetze, muessen Fehler gueltige Objekte sein, die von der Base-Class Exception abgeleitet sind.

Sobald ich die Klasse von 'Exception' ableite, funktioniert ueberhaupt nichts mehr. Und nebenbei moechte ich ja eigene, unabhaengige Klassen bauen.

Bin fuer jede Hilfe dankbar.

Klaus
__________________
I think there is a world market for maybe five Computers!!
- Thomas Watson, Chairman of IBM, 1943
black_panther ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.06.2006, 22:11  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Re: Instanzierung einer neuen Exception-Klasse

Zitat:
Zitat von black_panther
Sobald ich die Klasse von 'Exception' ableite, funktioniert ueberhaupt nichts mehr.
D.h. genau?
Zergling-new ist offline  
Alt 06.06.2006, 22:26  
Neuer Benutzer
 
Registriert seit: 06.06.2006
Beiträge: 5
black_panther
Standard

Das heisst im Speziellen, dass es beim Ueberladen der Funktion 'getMessage()' einen Fehler auswirft. Ich koennt's natuerlich auch probieren, die Funktion zu ueberladen, aber ich weiss nicht, ob php 'overload function ...' erkennt. Und beseitigt das mein Problem? Es muss doch moeglich sein, eigene Exception-Klassen zu erstellen, ohne diese von der Base-Class ableiten zu muessen.
__________________
I think there is a world market for maybe five Computers!!
- Thomas Watson, Chairman of IBM, 1943
black_panther ist offline  
Alt 06.06.2006, 22:47  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
einen Fehler auswirft
welchen mensch?

Zitat:
Es muss doch moeglich sein, eigene Exception-Klassen zu erstellen, ohne diese von der Base-Class ableiten zu muessen.
Das Manual zu Exceptions hast du gelesen?
Zergling-new ist offline  
Alt 06.06.2006, 23:29  
Neuer Benutzer
 
Registriert seit: 06.06.2006
Beiträge: 5
black_panther
Standard

Fehlermeldung:

Fatal error: Cannot override final method Exception::getMessage() ...

Zitat:
Das Manual zu Exceptions hast du gelesen?
Nein, das Manual hab ich nicht gelesen. Muss ich das tun, wenn ich einen Code aus einem Lehrbuch abschreibe!? Und mir kommt eigentlich vor, das das eine nicht mit dem anderen zu tun hat.
__________________
I think there is a world market for maybe five Computers!!
- Thomas Watson, Chairman of IBM, 1943
black_panther ist offline  
Alt 06.06.2006, 23:46  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von black_panther
Zitat:
Das Manual zu Exceptions hast du gelesen?
Nein, das Manual hab ich nicht gelesen. Muss ich das tun, wenn ich einen Code aus einem Lehrbuch abschreibe!?
ja. ein buch ist mit druckfreigabe bereits veraltet.

Zitat:
Und mir kommt eigentlich vor, das das eine nicht mit dem anderen zu tun hat.
nein. exceptions sind sonderfälle, mit denen man nicht wie üblich rumspielen darf. du hast halt damit nicht so viele freiheiten, wie du gerne hättest, und das aus einem durchaus wohlüberlegten grund.


also ab und doku lesen.
http://de2.php.net/throw
http://de2.php.net/manual/en/language.oop5.final.php
grüße
axo
axo ist offline  
Alt 07.06.2006, 00:15  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Zitat:
Zitat von black_panther
Muss ich das tun, wenn ich einen Code aus einem Lehrbuch abschreibe!?
Wenn der Code aus dem Buch nicht funktioniert, bietet sich das an.
Hast Du die erste Auflage des Buches? Die ist nämlich von 2003, PHP 5 wurde aber erst Mitte 2004 fertig, und am Ende wurde noch einiges umgestrickt, der PHP5-Inhalt des Buches ist also aus den Sternen gelesen.


Zitat:
Zitat von black_panther
Und mir kommt eigentlich vor, das das eine nicht mit dem anderen zu tun hat.
http://de2.php.net/manual/en/languag...ions.extending

Eine Exception zeichnet sich dadurch aus, dass sie von der Klasse Exception abgeleitet ist.
Und im Manual sieht man direkt, welche Methoden man überschreiben kann und welche nicht. __toString() bietet sich irgendwie an.
__________________
mod = master of disaster
Waq ist offline  
Alt 07.06.2006, 19:14  
Neuer Benutzer
 
Registriert seit: 06.06.2006
Beiträge: 5
black_panther
Standard

Hallo, vorerst mal Danke zu allen, die mir geholfen haben. Mein bisheriger Fehler ist beseitigt. Aber irgendwie funktioniert das ganze immer noch nicht. Irgendwo ist da ein Bug drinnen, den ich einfach nicht seh. Folgender Code kommt zur Anwendung:

Klassendefinition:
Code:
<?php

class DatabaseException extends Exception
{

	private $intErrNo;
	private $strError;
	
	public function __construct($strError,$intErrNo=0)
	{
		$this->$intErrNo = $intErrNo;
		$this->$strError = $strError;

		parent::__construct($strError,$intErrNo);
	}
	
	public function __toString()
	{
		return __CLASS__ . "[{$this->$intErrNo}]: {$this->$strError}\n";
	}
	
	public function getNumber()
	{
		echo $this->$intErrNo;
		// return $this->$intErrNo;
	}

}

?>
Testaufruf der neuen Klasse:
Code:
 <?php

require_once('DatabaseException.class.php');

try
{
	$connection = @mysql_connect('localhost','root','');
	if($connection):
		echo '

Es klappt! Die Verbindung zur Datenbank wurde hergestellt!!</p>';
	else:
		throw new DatabaseException("Die Verbindung zur Datenbank konnte nicht hergestellt werden!
Fehlerbeschreibung: " . mysql_error(), mysql_errno());
	endif;
}

catch(DatabaseException $e)
{
	echo 'Fehler: ', $e;
	$e->getNumber();
}

catch(Exception $e)
{
	echo $e->getMessage();
}

?>
Ergebnis im Browser:
Code:
Fehler:
Fatal error: Cannot access empty property in D:\Webserver\xampp\htdocs\php-studium\DatabaseException.class.php on line 19
Was mach ich falsch?

Zusaetzlich kommt mir langsam auch vor, dass mein Editor (Dreamweaver MX2004) nicht gerade die beste Wahl ist.

Uebrigens benutze ich die zweite Auflage des Buches (korrigierter Nachdruck 2005). Da wird wohl hinsichtlich php5 nicht mehr gar soviel 'aus den Sternen gelesen' worden sein, oder?
__________________
I think there is a world market for maybe five Computers!!
- Thomas Watson, Chairman of IBM, 1943
black_panther ist offline  
Alt 07.06.2006, 19:23  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

$this->$intErrNo sollte wohl $this->intErrNo heissen
__________________
mod = master of disaster
Waq ist offline  
Alt 07.06.2006, 19:24  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Zitat:
Zitat von black_panther
PHP-Code:
echo $this->$intErrNo
Eigenschaften werden über $this->intErrNo (ohne das zweite $) angesprochen.
xabbuh ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
PHP: Exceptions - Teil 1 Zergling-new Tutorials 4 05.12.2007 23:31
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
MySQL - Klasse: Wie da mysql_close benutzen Igäl PHP Tipps 2006 5 01.10.2006 23:09
Eine Klasse mehrere Dateien sn00py PHP Tipps 2006 6 08.05.2006 11:40
mehr als eine Klasse einbinden Alpha Centauri PHP-Fortgeschrittene 4 13.04.2006 20:56
Klasenname einer nicht instanziierten Klasse DerDesian PHP Tipps 2007 9 30.11.2005 13:13
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
[Erledigt] Führerschein für Klasse A+B.. Preis OK??? Off-Topic Diskussionen 20 13.07.2005 18:44
Rückgabewert auf einer Klasse anders als in der Klasse micbur PHP Tipps 2005-2 6 10.06.2005 15:06
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Klasse holt sich die Klasse PHP-Fortgeschrittene 9 07.10.2004 11:53
[Erledigt] Brauche Hilfe bei meiner ersten Klasse PHP-Fortgeschrittene 9 24.09.2004 17:09
Klassenobjet in anderer Klasse benutzen inu PHP Tipps 2004 6 19.09.2004 10:58
Klasse ändern UniQ PHP Tipps 2004 5 24.08.2004 14:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php fatal error: \exceptions must be valid objects derived from the exception base class\, must be valid objects derived from the, cannot override final method exception::getmessage()

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:59 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.