Johannes: Zugreifen auf eine Instanzvariable aus einer Funktion

Hallo,

meine Idee war es eine "Errorklasse" zu erstellen, in der Funktionen zum formatieren von Fehlermeldungen sind und die eine Instanzvariable beinhaltet, die Fehler speichert.

class meineErrorKlasse{
    var $error = "";
    function errorspeichern($error){
$this->error .= $error;
}}

so im ganz groben.

Nun erstelle in meiner Indexseite ein Objekt dieser Klasse.

$errorinstanz = new meineErrorKlasse();

Unter anderem gibt es eine Datei funktions.inc, die in diese Indexseite includiert ist. Dort ist auch eine Funktion drin, die mir eine Datenbank ausliest und mir ein array zurückgibt.

Wenn dort ein fehler auftritt, soll dieser die Funktion

$errorinstanz->errorspeichern("fehler");

aufrufen.

Leider klappt das aus dieser Funktion nicht, sondern nur direkt aus der Datei, in der ich die Instanz erstellt habe.

Gibt es eine Möglichkeit, das ich auch aus z.B. dieser Datenbankfunktion Zugriff auf die Instanz habe?

Gruß

Johannes

  1. Nun erstelle in meiner Indexseite ein Objekt dieser Klasse.

    Gibt es eine Möglichkeit, das ich auch aus z.B. dieser Datenbankfunktion Zugriff auf die Instanz habe?

    Du hast das Problem mit dem Geltungsbereich von Variablen nicht beachtet.

    Es gibt da auch noch Möglichkeiten, das Problem eleganter zu lösen.
    Du hast dann keine Variablen rumliegen und verwendest stattdessen statische Methodenaufrufe, ohne auf die Geltungsbereiche von Variablen Rücksicht nehmen zu müssen.

    Dokumentationsverweise:
    Die Verwendung von statischen Variablen
    Referenzen in PHP
    Klassen und Objekte - Kapitel '::'

    class Error {
      // Hilfsmethode, gibt eine Referenz auf die statische Variable $errors zurück
      function &_getErrors() {
        static $errors = array();
        return $errors;
      } //Error::_getErrors

    // Fügt eine neue Fehlermeldung hinzu
      function Raise($errorMessage) {
        $errors =& Error::_getErrors();
        $errors[] = $errorMessage;
      } //Error::Raise

    // gibt alle Meldungen zurück und löscht diese ggf.
      function GetAllMessages($glue = "<br/>\n", $clear = true) {
        $errors =& Error::_getErrors();
        $result = implode($glue, $errors);
        if ($clear)
          $errors = array();
        return $result;
      } //Error::GetAllMessages
    } //class Error

    language.variables.scope.static

    Das Ganze kann nun so verwendet werden:

    Ein neuer Fehler wird angefügt:

    if ($fehlerbedingungErfüllt)
        Error::Raise('fehlermeldungstext');

    Alle Fehlermeldungen werden getrennt mit <br /> zurückgegeben und der Fehlerspeicher gelöscht:

    echo Error::GetAllMessages();

    Alle Fehlermeldungen werden getrennt mit Leerzeichen zurückgegeben und der Fehlerspeicher wird nicht gelöscht:

    echo Error::GetAllMessages(' ', false);

    1. Hallo,

      danke für diese ausführliche Antwort.

      Ich werde das natürlich sofort ausprobieren,

      Gruß,

      Johannes