PHP OOP - login/setSession/etc.. Verständnissfragen zu OOP

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PHP OOP - login/setSession/etc.. Verständnissfragen zu OOP

    Hallo,

    ich habe ein paar Verständnissfragen zu PHP OOP.
    Und zwar will ich ein Klasse erstellen mit der ich das ganze regle also login, register, setsession und alles was dazugehört.

    Um mich da reinzuarbeiten habe ich ein Musterscript erstellt mit dem ich das ganze verinnerlichen will ;)
    Es geht mir lediglich um eine Hilfestellung im OOP Bereich, da normale PHP-Kenntnisse vorhanden sind.



    Quellcode

    1. <?php
    2. session_start();
    3. require_once('config/includes.php');
    4. class auth{
    5. public function login_user($var_user, $var_pass){
    6. $db = new Db();
    7. $sql = $db->query("SELECT * FROM user where user = '".$var_user."' AND pass = '".$var_pass."' limit 1");
    8. $row = $db->fetchArray($sql);
    9. }
    10. public function setSession(){
    11. $_SESSION['userId'] = 3211;
    12. $_SESSION['userName'] = "admin";
    13. }
    14. public function unsetSession(){
    15. unset($_SESSION);
    16. }
    17. }
    18. $login_user = new auth();
    19. $login_user->login_user('admin', sha1('admin'));
    20. $login_user->setSession();
    21. //$login_user->destroySession();
    22. echo $_SESSION['userId'];
    23. ?>
    Alles anzeigen


    1. Wie genau muss ich setSession(); umschreiben damit das ganze mit den Daten von der Zeile dadrüber benutzt wird?
    Hab überlegt das ganze mit Variablen zu machen aber wenn über eine andere Klasse auf die Variable zegegriffen wird dann muss ich die logindaten dennoch benutzen.

    2. Gibt es ein paar Standards die man benutzen sollte? Ich weiss ja nicht es gibt halt viele Sachen die nach einem bestimmten Schema gemacht werden.

    3. Welche Funktionen könnte man noch mitaufnehmen?



    Einfach mit bisschen Fantasie antworten ;]

    mfg
  • Also es gibt verschiedene Arten von Klassen.

    Es gibt Models zur Datenhaltung. Dazu gehört z.B. dein User, ein Forenbeitrag, ...
    Ein Controller dient zur Ablaufsteuerung. So gibt es zum Beispiel einen der entscheidet, welche Seite angezeigt werden soll (auch Disptacher genannt), dann Formulare, Login Controller, ...

    Was man auch häufig hat sind Helper Klassen, die vom Controller genutzt werden.
    Für die Login Seite benötigst du also konkret den ...

    Login Controller, der entscheidet welche Formulare benötigt werden.
    Dieser steuert dann am besten eine Auth-Helper-Klasse, dadurch ist es möglich den Login an verschiedenen Stellen weiterzunutzen.

    Beispiel findest du auch hier: [wiki]Objektorientierung mit Models[/wiki]

    Hier mal ein kleiner Entwurf

    Quellcode

    1. class User extends Model {
    2. public static function findByLogin($user, $pass) {
    3. $row = db->fetch()
    4. return $row ? new self($row) : null;
    5. }
    6. }
    7. class AuthHelper {
    8. public static function isLogin() {
    9. return $_SESSION['userId'] > 0;
    10. }
    11. public static function doLogin($var_user, $var_pass){
    12. $user = User::findByLogin($var_user, $var_pass);
    13. if($user) {
    14. $_SESSION['userId'] = $user->userid;
    15. $_SESSION['userName'] = $user->username;
    16. return true;
    17. }
    18. return false;
    19. }
    20. public static function doLogout() {
    21. unset($_SESSION);
    22. }
    23. }
    24. class LoginController {
    25. public function execute() {
    26. $isLogin = AuthHelper::isLogin();
    27. if($isLogin) {
    28. throw new Exception('du bist bereits angemeldet');
    29. }
    30. if(AuthHelper::doLogin($_POST['user'], $_POST['pass'])) {
    31. echo "du bist jetzt angemeldet, viel spaß";
    32. } else {
    33. throw new Exception('falsche zugangsdaten');
    34. }
    35. }
    36. }
    Alles anzeigen
  • Quellcode

    1. class User extends Model {
    2. public static function findByLogin($user, $pass) {
    3. $row = db->fetch()
    4. return $row ? new self($row) : null;
    5. }
    6. }

    Da wir gerade über OO reden: Ich halte die Benennung für ziemlich unglücklich gewählt. Was du da implementierst ist kein User, sondern das Modell eines Users. Das ist ein wichtiger Unterschied! Ein User ist ein Objekt der Domänenschicht, welches erst später durch Modelle abstrahiert wird. Du schreibst auch selbst im Wiki: "Ein Model ... enthält die Daten auf die der Controller zugreift"

    Um noch mal in Java-Syntax verständlich zu machen, auf was ich hinaus will:

    Quellcode

    1. public class User extends DomainObject {
    2. ...
    3. }
    4. public abstract class Model<T> {
    5. ...
    6. }
    7. public class UserModel extends Model<User> {
    8. ...
    9. }
    Alles anzeigen
  • Hmhmhm..
    an sich ist das ja nicht falsch. Nur weil man hier auf Patterns verzichtet hat, ist Torbens Beitrag nicht falsch sondern eher allgemeiner. Klar könnte man noch ne Domäneschicht reinbasteln aber glaubst du dass es einem Neuling (sorry Nippel falls dem nicht so ist) hilft?
    Ich denke mal Torbens Beitrag war als Grundlage so schon richtig. Deiner zwach auch aber vielleicht etwas zu fortgeschritten für einen Neuling im OO Bereich. ;)
  • Hehe doch im OO bin ich ein Neuling ;)
    Verstehe den Code aber dennoch bis auf diese Zeile:

    Quellcode

    1. return $row ? new self($row) : null;


    Mit new wird doch ein Object erzeugt + self ist es dann die eigene Klasse ..
    Aber wozu der Paramter $row?

    Weiss selber nicht genau was ich wissen will, aber versuchen wir es mal so.
    Ich brauch KEINEN Code sondern eine "Skizze".

    zB. ein Teil mit den SQL-Querys, Formularen, etc pp.
    Und wodurch sollte man auf die obengenannten Klassen zugreifen.

    Hoffe es ist verständlicher, denn ich verstehs selber nicht ganz ;]