PHP: Problem mit OOP

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Neptunar
Beiträge: 24
Registriert: 10.05.2005 16:46
Wohnort: Hmmm.... wenn ich das wüsste

PHP: Problem mit OOP

Beitrag von Neptunar »

Hallo zusammen,

ich habe ein kleines Problem mit dem beliebten PHP.
Ich hatte mir eine Klasse geschrieben namens c_login.php

Dort sind folgende Methoden enthalten
- Login($name, $password)
- IsLogin()
- Logout()

Problem: Geht man auf die Seite login.php, kann mit Hilfe der Methoden der Klassen problemlos geprüft werden ob der User Zugangsberechtigungen hat.

Auf der index.php wird geprüft ob ein Objekt über die Klasse erstellt worden ist. Lange rede kurzer Sinn:

Ist das Objekt was durch die Klasse erzeugt wird nicht Global?
Habe ich mich über login.php erfolgreich angemeldet, gibt index.php aus, das noch kein objekt erzeugt wurde, das prüfe ich mit is_object($ObjektName);

Diese Prüfungsroutine funktioniert auch, sollte ich in der index.php Datei ein Objekt anlegen gibt die Funktion true zurück.
Alles weist darauf hin, das das erzeugte Objekt nicht global ist, dann verstehe ich allerdings nicht den Sinn der OOP in PHP.

Vielleicht hat jemand auch ein Denkanstoß für mich, wie ich das Problem eliminieren könnte. Der Fehler sitzt ja bekanntlich immer vor dem Monitor.

Mit freundlichen Grüßen
Neptunar :mrgreen:
3... 2... 1... doooooooom
MonkeyBoogie
Beiträge: 21
Registriert: 17.01.2006 14:33

Re: PHP: Problem mit OOP

Beitrag von MonkeyBoogie »

Neptunar hat geschrieben:Problem: Geht man auf die Seite login.php, kann mit Hilfe der Methoden der Klassen problemlos geprüft werden ob der User Zugangsberechtigungen hat.

Auf der index.php wird geprüft ob ein Objekt über die Klasse erstellt worden ist. Lange rede kurzer Sinn:

Ist das Objekt was durch die Klasse erzeugt wird nicht Global?
Habe ich mich über login.php erfolgreich angemeldet, gibt index.php aus, das noch kein objekt erzeugt wurde, das prüfe ich mit is_object($ObjektName);
Ich glaub du hast da einen Denkfehler.
Wenn du auf login.php ein Object erstellst, dich einlogst etc, dann auf die index.php gehst, dann ist das Object nicht mehr vorhanden, weil du die Seite gewechselt hast.
Du must auf beiden Seiten das Object neu erstellen, das das HTTP Protokoll zustandslos ist, sprich, ein Request, das wars. Der Webserver dahinter erstellt bei jedm Seitenwechsel ein neuen Prozess, wo alle bist dahin verwendeten Daten verloren sind.

Das Zauberwort heisst Sessions http://de3.php.net/session
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Richtig. Falls du aber an Monkeys Antwort was nicht verstehst, kannst du hier das gleiche nochmal lesen: Die ganzen Variablen/Objekte/eigtl. alles gehen verloren, wenn du diese nicht gesondert übergibst - und dafür hast du ein paar Möglichkeiten zur Auswahl, für so was eignen sich aber Sessions am Besten.
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
Neptunar
Beiträge: 24
Registriert: 10.05.2005 16:46
Wohnort: Hmmm.... wenn ich das wüsste

Beitrag von Neptunar »

erstmal danke für eure antworten,

also macht oop in diesem fall ja nicht viel sinn, ich müsste jedes mal ein neues objekt erzeugen oder es über eine "weitere" session speichern, schließlich hab ich ja schon eine in der methode login.

naja, ich frag das nun lieber direkt per $_SESSION[]; ab. das reicht mir auch. :)
3... 2... 1... doooooooom
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Ich glaub du hast den Nutzen von OOP noch nicht so total erfasst, es geht jedenfalls nicht um die Speicherung der Daten!
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
MonkeyBoogie
Beiträge: 21
Registriert: 17.01.2006 14:33

Beitrag von MonkeyBoogie »

bluejoke hat geschrieben:Ich glaub du hast den Nutzen von OOP noch nicht so total erfasst, es geht jedenfalls nicht um die Speicherung der Daten!
Das Problem ist halt die unterschiedliche Funktionsweise zwischen Desktop- und Web(Script)sprachen.
Ich persönlich benutze nur OO mit PHP/Perl etc. Macht ja auch Sinn.

Mal eine kleine Erklärung.
Das Web ist zustandslos, sprich, wenn ich eine Webseite aufrufe, dann startet auf dem Server ein Process, die index.php. Diese Datei ist ein eigenständiger Prozess, der, wenn die Seite voll geladen ist, beendet wird. Das Gegenstück wäre eine Exe, die die index.php ausliefert - diese würde nach der Anfrage wieder geschlossen werden.

In der Index ist jetzt also ein Include mit einer Klasse "class myApp". Diese muss instanziert werden, ist ja auch logisch. Da der Prozess ja am Ende geschlossen wird, muß auf der nächsten Seite, dem neuen Prozess, die Instance wieder hergestellt werden.

Mit dynamischen Inhalten wird aber im Grunde alles leichter.

Hier mal eine index.php

Code: Alles auswählen


function printLoginPage() {
    echo 'Login';
}

function printWelcomePage() {
    echo 'Home';
}

class myApp {
    public function doLogin($sUser, $sPass) {
        if ($sUser == 'blah') {
            [...]
        }
    }

    public function getStatus() {
        return true;
    }
}

$Obj = new myApp();

/**
 * Funktionsaufrufe
 */
switch ($_GET['do']) {
    case 'login':
        $Obj->doLogin($_POST['user'], $_POST['pass']);
    break;
}

/**
 * Status 
 */
if ($Obj->getStatus() == true) {
    echo 'eingeloggt';
}
else {
    echo 'failed';
}

/**
 * Seite anzeigen
 */
switch ($_GET['do']) {

    case 'login':
        printLoginPage();
    break;
    
    default:
        printWelcomePage();
    break;
}

Um nicht jedes mal in einer neuen Datei das ganze neu zu schreiben, benutzt man Variablen.

index.php zeigt die Startseite
index.php?do=login zeigt die Login seite

Die Klasse wird zwar jedes mal neu instanziert, aber Programmieraufwand ist bei weitem nicht so hoch, als wenn man auf jeder Seite immer und immer wieder die gleichen Funktionen aufruft.

Monkey
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Ich seh da gar kein Problem, da ist doch kaum ein Unterschied zu Desktop-Programmen. Wenn jemand öfters das selbe Programm startet, weiß deswegen doch nicht jedes, was das andere gerade macht. Oder eben bei verschiedenen Programmen die nacheinander gestartet werden, weiß das eine Programm doch gar nicht, was das andere gemacht hat - so wie überall halt.
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Antworten