PHP objekt orientiert (BSP: Newsletter)
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufrufen
beispiel
code
datum
formular
frage
funktion
grad
http
klasse
laden
letter
login
machen
objekt
position
schau
sinn
text
vorteil
-
Hi Leute ich hab grad glaub ich ein kleines Verständnisproblem.
Und zwar wie PHP eigentlich Objekt orientiert ist bzw wie man damit wirklich objekt orientiert Programmiert,
da ja dann doch alles ablaufgesteuert passieren muss ....
Frag mich das weil ich grad einen Newsletter Programmieren wollte ...
Da doche ich allso ein ein Class Newsletter
class Newsletter { function sendMail($TO_mailAdr,$CC_mailAdr, $BCC_mailArd, $subject, $text, $attachment) { // $TO_mailAdr,$CC_mailAdr, $BCC_mailArd, $attachment können Arrays sein // in dieser Funktion wird das das E-Mail zusammen gesetzt (hierfür gibts ne Classe) // als HTML-Version und als Text version, der Anhang hinzugefügt // mit Absender und Empfänger (To,CC,BCC) versehen und über die SMTP-schnittstelle versendet // Das mail wird zu archvierung zwecken noch indie DB gespeichert } function sendNewsletter($ListID, $subject, $text, $attachment) { // $attachment kann Arrays sein // die Funktion holt aus der Datenbank alle Adressen die mit der $ListID verküpft sind, // also diesen Newsletter empfangen sollen. // Dann werden die daten weitergegeben an: $this->sendMail($TO_mailAdr,$CC_mailAdr, $BCC_mailArd, $subject, $text, $attachment) } function showFormular() { // Diese Funktion gibt das Formular mit den benötigten Feldern aus // $subject = String // $text = Textarea // $attachment = File / FileArray // $ListID = OptionSelect (Jumpdown Menu) } }
und dann als "Programm"
include_once("database_class.php"); include_once("/every/thing/needed.php"); if(checkLogin()==1) // User eingeloggt ? { // JA: $Letter = new Newsletter(); if(isset($_POST["ListID"])) // Wurden die daten schon eingegeben ? { // JA: $Letter->sendNewsletter($ListID, $subject, $text, $attachment); // Newsletter wird also versandt // ein hinweiß wird ausgegeben } $Letter->showFormular(); // Das formular zur Eingabe } else{// Nein: printLoginForm(); // Warnung und login ermöglichen }
Das ganz wird also wieder nur durch die IF-Structur gesteuert.
Außerdem wäres gar nicht nötig eine Classe zu verwenden,
das könnten auch normale Funktionen ....
Oder sehe ich da was falsch?
WIe muss ich das anders betrachten, dass das Objekt getuhe sinn macht ?
Wie sihts eigentlich mit einem Sinnvollen constructor aus ?
Und kann man irgendwie sinnvoll die Authentifizierung besser lösen ?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
nun, bis jetzt hast du ja bereits einen vorteil: du hast die funktionen ausgegliedert und kannst sie ganz einfach aufrufen :)
Schau dir mal dieses CMS an: http://www.ld-network.de/
es ist noch übersichtlich und verdeutlicht perfekt die vorteile von OOP: du musst die Funktionen nur neu laden, wenn du sie wirklich brauchst.
Außerdem wäres gar nicht nötig eine Classe zu verwenden,
das könnten auch normale Funktionen ....
stimmt. Jedoch hast du in einem Großen Projekt so den überblick mit den Namen ;)
WIe muss ich das anders betrachten, dass das Objekt getuhe sinn macht ?
Nun, du bist doch schon davon überzeugt, dass Funktionen sinn machen. Mit den Objekten lädst du einfach nur immer deine benötigten Funktionsgruppen ;)
Wie sihts eigentlich mit einem Sinnvollen constructor aus ?
siehe CMS
Und kann man irgendwie sinnvoll die Authentifizierung besser lösen ?
die frage verstehe ich nicht... -
In deinem Beispiel macht eine Klasse wirklich keinen großen Sinn.
Sinn machen Klassen meistens, wenn du gewisse Daten etwas größerem zuordnest.
Beispiel
class User { private $name; private $rights; private $opts; private $optsChanged; private $db; public function __construct(PDO $db) { $this->db = $db; $this->name =& $_SESSION['USR_name']; // ... } public function login($name, $hash) { $db->query(...); // Userdaten bekommen und in die richtigen Felder schreiben ($this->name, ...) } public function logout() { //logout unset($_SESSION['USR_name']); // ... } public function getRight($position) { // return true if right at $position is set } public function setOpt($opt, ...); public function getOpt($opt, $returnOnNotSet); public function __destruct() { if($this->optsChanged) // change Opts in DB... } }
D.h. du speicherst gewisse Werte wie Name, Rechte, usw. und arbeitest dann mit diesen. Dafür sind Klassen sinnvoll.
Beitrag zuletzt geändert: 14.1.2010 15:12:13 von nikic -
raubritta schrieb:
nun, bis jetzt hast du ja bereits einen vorteil: du hast die funktionen ausgegliedert und kannst sie ganz einfach aufrufen :)
Schau dir mal dieses CMS an: http://www.ld-network.de/
es ist noch übersichtlich und verdeutlicht perfekt die vorteile von OOP: du musst die Funktionen nur neu laden, wenn du sie wirklich brauchst.
Ach das ist doch ein wenig zu viel für mein Gemüt.
Aber ein CMS wäre warscheinlich gut.
Kennt wer da ein noch kleineres ...
damit man mit den vielen 1000 Klassen als Anfänger nicht übervordert wird ...
Aber CMS mit auschließlich den GrundFunktionen (Seiten Management mit 2-3 Ebenen, "Statischen" Inhalt, News/Termin System, Bildergallerie)
raubritta schrieb:
Und kann man irgendwie sinnvoll die Authentifizierung besser lösen ?
die frage verstehe ich nicht...
Naja die Abfrage ob der User eingeloggt ist oder nicht,
welche rechte, ....
Rechte hab ich bis jetzt noch nie verwendet, aber würd ich gerne mal ... Aber das immer über IFs ..
nikic schrieb:
In deinem Beispiel macht eine Klasse wirklich keinen großen Sinn.
Sinn machen Klassen meistens, wenn du gewisse Daten etwas größerem zuordnest.
Beispiel
D.h. du speicherst gewisse Werte wie Name, Rechte, usw. und arbeitest dann mit diesen. Dafür sind Klassen sinnvoll.
Also die Aussage ver steh ich prinzipjell schon,
aber das beispiel kann ich nicht nachvollziehen ... -
Also, die Klasse in dem Beispiel ist für User.
Das läuft so ab. Am Anfang meiner Seite binde ich diese Klasse über require ein. Dann instanziiere ich einen User:
$user = new User($db);
Dabei ist $db eine Datenbankverbindung.
Beim instanziieren wird der Konstruktor aufgerufen. In diesem wird gesehen (in der Session), ob der User eingeloggt ist und wenn ja, werden seine Daten übernommen.
Dann kann ich $user->login(NAME, PASSWORT) aufrufen, wenn sich der User einloggen möchte, beispielsweise.
Oder ich kann $user->hasRight(User::kannInDerShoutBoxPosten) aufrufen.
Oder ich kann Optionen setzen $user->setOpt('Email Addresse anzeigen', true);
Vorteil einer Klasse ist hier, dass alles was mit dem User zu tun hat in dieser Klasse gespeichert wird. Ich mülle also nicht den globalen Namensraum zu, sondern bündle alles in einer Klasse. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage