Willkommen in der Webstatt Zum Webstatt Blog und Stories
phore phore am 05.04.06 11:04

moin.

ich arbeite mich in letzter zeit etwas in oop in php ein. und im moment überleg ich mir grad wie ich es am besten mit den fehler mache..früher hab ich die error irgendwie per echo oder über GET ausgeben lassen - das ist ja nicht wirklich elegant :)
hier ist mein versuch - funktioniert nicht - ist nur ein beispiel.
macht das überhaupt sinn, gibt es bessere möglichkeiten? wie schaff ich es dass die variable $error von function zu function übergeben wird und am schluss wieder ausgeben?

<?
/*
* errorhandling beispiel
*/
class bsp {

var $error;

# funktion wo was passiert
function test () {
if (befehl) {
mach was
}
else {
# wie übergeb ich den fehler an die function 'error'?
$error.= '<br />irgendeinfehler ist passiert!';
}
}

# funktion falls error
function error ($error) {
$this->error = $error;

if ($error) {
$error_out = '<b>error:</b>';
$error_out.= $error;
}
}
}

# funktion starten
$bsp = new bsp();
$bsp->test();
# wie geb ich hier den error aus?
?>


danke euch!
so long - phore

netcup.de Warum gibt es hier Werbung?
Michael Michael am 05.04.06 11:10

Dein Freund ist die Funktion set_error_handler. Mit dieser kannst du eine Funktion bestimmen, die bei trigger_error aufgerufen wird. Dass kann auch eine Klassenmethode sein.
Die Parameter sind: $fehlerlevel, $fehlermeldung, $fehlerfile, $fehlerline

Wenn du eine Klassenmethode als Errorhandler definierst, kannst du aufgetretene Fehler einfach in einem Attribut speichern.

Eine andere Möglichkeit wäre try { ... } catch() { ... }. Die Möglichkeit gibt es zum Einen aber erst seit PHP5 und zum Anderen ist sie meiner Meinung nach auch nicht schön.

phore phore am 05.04.06 11:11

danke für die antwort..
hast du evtl. ein beispiel?

try, catch kenn ich von c# - das mag ich nicht..lieber was anderes :)

Franky Franky am 05.04.06 14:22

http://de.php.net/manual/en/function.set-error-handler.php :)

phore phore am 06.04.06 12:55

jo ist mir klar - ich find die erklärung aber igendwie ziemlich kompliziert, bzw. ich hab keine ahnung wie ich das in meinem fall einsetzen würde...
wie müsste ich es zb. machen wenn das mein script wäre:

function $answer ()
{
$this->question = $question;
$this->answer = $answer;

if ($this->question != $this->answer) {
...(fehler)...
}
else {
echo 'gut - es stimmt';
}
}


wäre um hilfe froh - danke schonmal!
so long - phore

Michael Michael am 06.04.06 13:02

function $answer ()
{
$this->question = $question;
$this->answer = $answer;

if ($this->question != $this->answer) {
trigger_error('fehlermeldung');
}
else {
echo 'gut - es stimmt';
}
}


Bei trigger_error könntest du noch ein Level des Fehlers definieren. Um die Fehler selbst zu behandeln musst du vorher - sinnvollerweise soweit am Anfang des Scriptes wie möglich - eine eigene Funktion als Handler definieren. Dies geht wie schon gepostet mit set_error_handler. Bei einer normalen globalen Funktion ist nur ein Argument, der Funktionsname, erforderlich.
Diese Funktion wird dann automatisch mit den nötigen Parametern aufgerufen.

Michael

phore phore am 06.04.06 13:13

und so wird der fehler automatisch an die fehlerklasse gegeben?
ich probiers mal aus - danke dir!

nuit nuit am 06.04.06 13:53

Quote
Original von phore
try, catch kenn ich von c# - das mag ich nicht..lieber was anderes :)


try and catch, ist aber auch nicht sooo gut, so was ich gehoert hab *fg* ich verwend es nicht...wird aber so wie ich das gesehn hab als schlechter Programmierstil aufgefasst..aber jedem das seine *fg*

Michael Michael am 06.04.06 14:42

Quote
Original von Michael
Eine andere Möglichkeit wäre try { ... } catch() { ... }. Die Möglichkeit gibt es zum Einen aber erst seit PHP5 und zum Anderen ist sie meiner Meinung nach auch nicht schön.


Genau. Gegen try...catch ;)

Quote
und so wird der fehler automatisch an die fehlerklasse gegeben?
ich probiers mal aus - danke dir!


Jaein, eben an die Funktion. Eine Klasse kannst du nicht definieren, einzig eine Methode, dafür wäre die Syntax set_error_handler($class,'method') soweit ich mich entsinne.

Michael

phore phore am 06.04.06 15:13

hm - mal unabhängig von den fehlermeldungen, wie übergeb ich eine variable von einer function zu einer anderen function?

das ist mein versuch - gibt aber ein fehler.. (call to undefined function)
$test = new test();
$test->test1($variable1);

class test
{
function test1 ($variable1)
{
$this->variable1 = $variable1;
$test->test2($this->variable1);
}

function test2 ($variable1)
{
$foo = $this->variable1;
}
}


danke

Michael Michael am 06.04.06 15:26

$test = new test();
$test->test1($variable1);

class test
{

var variable1;

function test1 ($variable1)
{
$this->variable1 = $variable1;
$this->test2($this->variable1);
}

function test2 ($variable1)
{
$foo = $this->variable1;
}
}


Du musst die Variablen der Klasse (Attribute) auch definieren.

Und es heisst nicht $test->test2($this->variable1); sondern $this->test2($this->variable1);

phore phore am 06.04.06 21:35

ah ok - danke nochmal

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt