Webstatt.org - Community seit 2006 - 2012 (2024?)

logisches errorhandling?

Avatar user-279
05.04.2006 09: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 lächeln
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 - user-279

Avatar user-253
05.04.2006 09: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.

Avatar user-279
05.04.2006 09:11

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

try, catch kenn ich von c# - das mag ich nicht..lieber was anderes lächeln

Avatar user-182
05.04.2006 12:22

http://de.php.net/manual/en/function.set-error-handler.php lächeln

Seid ihr auch schon wix'r? xD
Avatar user-279
06.04.2006 10: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 - user-279

Avatar user-253
06.04.2006 11:02

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

if ($this->question != $this->answer) {
trigger_error('fehlermeldung'zwinkern;
}
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

Avatar user-279
06.04.2006 11:13

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

Avatar user-271
06.04.2006 11:53

Original von user-279
try, catch kenn ich von c# - das mag ich nicht..lieber was anderes lächeln


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*

#!/bin/bash
traurig){ neutral:& };:
Avatar user-253
06.04.2006 12:42

Original von user-251el
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 zwinkern

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'zwinkern soweit ich mich entsinne.

Michael

Avatar user-279
06.04.2006 13: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

Avatar user-253
06.04.2006 13: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);

Avatar user-279
06.04.2006 19:35

ah ok - danke nochmal