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

Erste OOP Klasse

  • Ersteller Ersteller DerMitSkill
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
D

DerMitSkill

Guest
Hallo,
ich hab mich jetzt zum ersten mal an OOP versucht und eine Klasse zum Registrieren gemacht... wollte mal wissen ob das so ok ist :)

/klassen/benutzer-registrieren.php
PHP:
<?php

    class BenutzerRegistrieren {
        public $EMailAdresse;
        public $Passwort;
        public function EMailAdresse($Wert) {
            $this->EMailAdresse = $Wert;
        }
        public function Passwort($Wert) {
            $this->Passwort = $Wert;
        }
        public function speichern() {
            $MySQLVerbindung = new mysqli("127.0.0.1","benutzer","passwort","datenbank","3307");
            $MySQLVerbindung->query("INSERT INTO Benutzer (EMailAdresse,Passwort) VALUES ('".$this->EMailAdresse."','".$this->Passwort."')");
        }
    }

?>
test.php
PHP:
<?php

    error_reporting(E_ALL | E_STRICT);

    require_once($_SERVER['DOCUMENT_ROOT']."/klassen/benutzer-registrieren.php");

    $test = new BenutzerRegistrieren;
    $test->EMailAdresse("[email protected]");
    $test->Passwort("testpasswort");
    $test->speichern();
?>
Ist das gut so?

Die Werte für EMailAdresse und Passwort können ja mit einem Formular übergeben werden...
 
1. Klassen-Variable macht man normalerweise nicht public, wenn sie nur innerhalb der Klasse verwendet werden sollen. In deinem Fall wäre private angebracht.

2. Um darauf zuzugreifen verwendet man Getter (um den Wert zu holen) und Setter (um den Wert zu setzen). Getter und Setter sind dann public. Hier ein kleines Beispiel:

PHP:
public function getPasswort(){
     return $this->Passwort;
}

public function setPasswort($value){
     $this->Passwort = $value;
}


Ansonsten ein schöner Anfang.
 
Korrektur:

/klassen/benutzer-registrieren.php
PHP:
<?php

    class BenutzerRegistrieren {
        private $EMailAdresse;
        private $Passwort;
        public function setEMailAdresse($Wert) {
            $this->EMailAdresse = $Wert;
        }
        public function setPasswort($Wert) {
            $this->Passwort = $Wert;
        }
        public function speichern() {
            $MySQLVerbindung = new mysqli("127.0.0.1","benutzer","passwort","datenbank","3307");
            $MySQLVerbindung->query("INSERT INTO Benutzer (EMailAdresse,Passwort) VALUES ('".$this->EMailAdresse."','".$this->Passwort."')");
        }
    }

?>
test.php
PHP:
<?php

    error_reporting(E_ALL | E_STRICT);

    require_once($_SERVER['DOCUMENT_ROOT']."/klassen/benutzer-registrieren.php");

    $test = new BenutzerRegistrieren;
    $test->setEMailAdresse("[email protected]");
    $test->setPasswort("testpasswort");
    $test->speichern();
?>
Meintes Du es so?
Hab ich den Sinn von OOP verstanden? (Eurer Meinung nach)
 
Meinstes Du es so?
Hab ich den Sinn von OOP verstanden? (Eurer Meinung nach)

Ja so meinte ich es.

Ob du den Sinn verstanden hast kann ich dir nicht sagen, da dein Beispiel im Prinzip nur aus einer Klasse besteht. Den richtigen Sinn von OOP merkt man erst wenn Vererbung ins Spiel kommt, was bei dir noch nicht der Fall ist. Theoretisch kannst du in deiner Klasse alles reinklatschen und hast unterm Strich effektiv kein OOP.

Mein erstes OOP Projekt war ein selbst ausgedachtes, weil mir die Beispiele aus den Büchern zu einfach waren. Meine Mutterklasse hies Tierheim. Vielleicht kannst du ja mal ein bisschen damit fantasieren oder dir was eigenes ausdenken.


Was noch net so dolle ist, aber nix mit OOP zu tun hat ist dein require_once (der Pfad). Ich hab aus sicherheitsgründen den include_path bei php wohin gelegt, wo man von außen gar nicht hinkommt.

z.B.

Ordnerinhalt von domain.de:
-> httpdocs
-> includes

in httpdocs liegen alle public files drin. in includes die klassen, config files, usw.
 
Daran habe ich auch schonmal gedacht. Allerdings stellt sich mir die Frage, inwiefern meine Methode unsicher ist... wie kommt man denn so an die Dateien?
 
Allerdings stellt sich mir die Frage, inwiefern meine Methode unsicher ist... wie kommt man denn so an die Dateien?

Sicher ist deine Methode nicht. Im Gegenteil. Sie ist die beste Möglichkeit für SQL Injections, sobald dein Script mit Daten aus $_POST oder $_GET arbeitet und du diese Daten nicht verarbeitest bevor du sie in die Datenbank jagst.
 
Na wer sagt das ich das nicht tue? Du meinst wohl mysql_real_escape_string()? Mach ich immer ;)

Ich hab noch was gemacht, eine Mail Klasse, ist die auch gut so? Wenn ja finde ich OOP extrem geil =)

/klassen/email.php
PHP:
<?php

    class EMail {
        private $Empfaenger;
        private $Betreff;
        private $Nachricht;
        private $Absender;
        public function setEmpfaenger($Wert) {
            $this->Empfaenger = $Wert;
        }
        public function setBetreff($Wert) {
            $this->Betreff = $Wert;
        }
        public function setNachricht($Wert) {
            $this->Nachricht = $Wert;
        }
        public function setAbsender($Wert) {
            $this->Absender = $Wert;
        }
        public function senden() {
            mail($this->Empfaenger,$this->Betreff,$this->Nachricht,"From: ".$this->Absender."\r\nContent-Type: text/html");
        }
    }

?>

/fehler/404.php
PHP:
<?php

    require_once($_SERVER['DOCUMENT_ROOT']."/klassen/email.php");

    $EMail = new EMail;
    $EMail->setEmpfaenger("[email protected]");
    $EMail->setBetreff("Fehler 404");
    $EMail->setNachricht("Ein Fehler 404 wurde ausgel&ouml;st.");
    $EMail->setAbsender("[email protected]");
    $EMail->senden();

?>
Wenn die Fehlerseite aufgerufen wird bekomme ich eine E-Mail, später auch mit Referrer.
 
Zuletzt bearbeitet von einem Moderator:
Warum so kompliziert? du hast jetzt eune wunderbare klasse um emails zu senden dann bau dir doch auch ne klasse die die aufgaben erledigt ;)

PHP:
class FehlerEmail extends EMail {
    public function __construct($to) {
        $this->setEmpfaenger($to);
        $this->setBetreff("Fehler 404");
        $this->setNachricht("Ein Fehler 404 wurde ausgel&ouml;st.");
        $this->setAbsender("[email protected]");
        $this->senden();
    }
}

und dann anstadt

PHP:
$EMail = new EMail;
$EMail->setEmpfaenger("[email protected]");
$EMail->setBetreff("Fehler 404");
$EMail->setNachricht("Ein Fehler 404 wurde ausgel&ouml;st.");
$EMail->setAbsender("[email protected]");
$EMail->senden();

einfach nurnoch

PHP:
new FehlerEmail;

ich würde da bei verschiedennen emails zu einer EMail factory raten musst mal nach dem factory parern googeln ^^
 
Ich finde das etwas unnötig für etwas, was nur einmal benutzt wird.... die Mail Klasse wird ja öfters genutzt, aber der Fehler nur ein einziges mal...
 
ja das denkst du, dann hast du es aber nicht verstanden ordentlich objektorientiert zu arbeiten ^^

nebenbei warum soll ein 404 fehler nur einmal auftreten können? der kann überall im system auftreten ^^
 
Aber so ist es doch mehr oder zumindest genauso viel Code. Ja ein 404 Fehler kann öfters auftreten, aber ich hab nur eine Fehlerseite für den 404 Fehler.

Ich möchte sinnvoll programmieren und nicht OOP oder prozedural. Was bringt mir OOP wenns total unlogisch und unnötig ist? Ich lass mich aber gerne eines anderen überzeugen...
 
Oder anders gesagt: Solange man OOP als unnötig, unsinnvoll und aufgebläht betrachtet, hat man es noch nicht verstanden ;-)

Das ist so ähnlich wie mit CSS-Design und semantischem HTML. Solange noch irgendwer Probleme mit HTML hat, oder Tabellen zum Layout besser findet, hat er HTML noch nicht verstanden.
 
für was du dich letztendlich auch entscheiden magst auf die geschwindigkeit deiner applikation wird es kaum auswirkungen haben.

aber dafür wirst du dir mit OOP später sehr viel entwicklungszeit spaaren ^^
 
Status
Für weitere Antworten geschlossen.

Neueste Beiträge

Zurück
Oben