• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

klasse "beenden"

mustang

Mitglied
Hallo Leute,

ich sitze mal wieder an einem Problem und wollte fragen, ob vielleicht jemand von euch eine Lösung oder einen Lösungsansatz kennt.
Ich arbeite auf meiner Seite mit einer Formularklasse. Wenn ich sie aufrufe, wird der Pfad für die action mit übergeben.

PHP:
$form = new formular("www.irgendeineurl.com/login.php");
$form->text("loginname", "Loginname");
$form->password("passwort", "Passwort");
$form->submit("Login");
$form->closeform();

Nun soll in der Klasse am Anfang im construct geprüft werden, ob der aktuelle User überhaupt Zugriffsrechte auf die action-Datei hat. Wenn nicht, soll das Formular nicht weiter ausgeführt werden.

PHP:
class formular {

     function __construct($action="#") {
     if (!check_zugang($action)) {
          $this->stopit();
     }
}

private function stopit () { XXX }
}

Im Prinzip suche ich einen Befehl ähnlich wie break, der einfach die gesamte Instanz beendet.
Eine andere Variante, die ich sehr schlecht finde, wäre jedes Formular in eine Überprüfung zu setzen. Die finde ich aber relativ sinnlos, da sie Aufwendig ist und nicht "selber" funktioniert.
Es gäbe noch die Möglichkeit eine Variable zu definieren, die bei Überprüfung auf die auf false gestellt wird, wenn kein Zugang erlaubt ist und welche ich in jeder Funktion überprüfe und die Funktion beende. Finde ich aber auch etwas viel Code nur, weil ich die Klasse beenden will...

Ich hoffe man versteht, was ich meine.
Vielen Dank schon einmal im Vorraus.
mustang
 
Wenn das funktionieren würde, was würdest du hier erwarten:
PHP:
$form = new formular("www.irgendeineurl.com/login.php");
Einen kaputten Objekt-Pointer?? False? Rufe die Methode check_zugang explizit auf.
 
Ja ein false wäre natürlich nicht schlecht. Außerdem eine Auswirkung darauf, dass die nächsten Funktionen nicht mehr funktionieren...
Da das aber leider nicht der Fall ist... verdammt ;-)
 
Wie wäre es wenn du überprüfst ob der User eingeloggt ist, bevor du die Instanz erstellst? Das würde die Erzeugung einer Instanz sparen und Fehler vorbeugen.
 
Ich würde zunächst strikt zwischen Konstruktion und Initialisierung unterscheiden. Der Konstruktur ist rein dafür verantwortlich, dass ein Objekt erzeugt und in der Laufzeit gespeichert wird. Im Konstruktor werden keine Anweisungen an das eigene Objekt gegeben.

Um letzteres umzusetzen sollten entweder einzelne Anweisungen von außen gegeben oder diese in einer Initialisierungsmethode zusammengefasst werden. Diese Methode erlaubt dann auch die Rückgabe eines Fehlerstatus.

PHP:
$form = new formular();
if($form->initialize("www.irgendeineurl.com/login.php")){
    $form->text("loginname", "Loginname");
    $form->password("passwort", "Passwort");
    $form->submit("Login");
    $form->closeform(); 
}

// ##########

class formular {
    public function __construct() {}
    public function initialize($action = "#"){
        if (!check_zugang($action) || false /* sonstige Bedingungen */) {
             return false;
        }
        return true;
    }
}

Ein Objekt ist ein Ding. Und ein Ding steuert sich nicht selbst. Anweisungen kommen nunmal vom Befehlshaber.
 
Zurück
Oben