Hallo!
Wie ist das bei PHP und der Objektorientierung: benutzt man sie in
Projekten oft, oder bleibt man eher nah an der Datenbank? Ich meine das
so, wenn man sich z.B. ein Loginsystem vorstellt und jetzt sagen wir 3
möglichkeiten hat, möglichkeit a) ist ein Forum b) eigenes Profil und c)
das Wetter in der eigenen Region...beim Einloggen wird eine Session ID
vergeben und wenn man auf a) klickt wird eine Tabelle neuer Themen vom
Forum geladen nach dem schema select topic from newnews und für jedes
topic gleichzeitig ein link generiert. Klickt man nun einen Beitrag an,
öffnet er sich, ebenfalls über SQL Abfragen, das passende HTML über
@echo <table><tr> <td> $topic></td>$from> drum herum erzeugt... Macht
man einen neuen Beitrag wird select into topics values($id.'textden
ichschreibe)... usw alles in diesem Stil, bis jetzt ohne
Objektorientierung... klickt man dann z.b. c) an wird wieder eine
Anfrage an die DB gemacht usw. Ich sehe nicht, wie man bei PHP
Objektorientierung sinnvoll einsetzen kann, wie könnte man mein
genanntes Beispiel z.B. umändern damit es objektorientiert ist?
Oder wenn man sich ein Warenkorbsystem vorstelle, ich sehe nicht wie das
objektorientiert geht, session id und wenn man was bestellt wird es in
die DB mit dem nickname geschrieben, fertig 2 zeilen..geht doch nicht
einfacher !?
du kannst z.b. nach dem Login alle Daten von dem User in einem Object
speichern. (email, name, alter, rechte )
Damit hast du dann inerhalb der Session imer zugriff auf die Daten und
musst sie nicht jedesmal aus der DB abfragen.
Ja, es geht.
Ja, es ist ab einer gewissen Größe sinnvoll.
Deine Betrachtungsweise ist aber etwas verquert - Objektorientierung hat
nichts mit der verwendeten Datenbank zu tun, auch wenn deren Wahl die
spätere Implementierung beeinflusst.
Habe leider auf Anhieb keinen besseren Artikel gefunden:
http://en.wikipedia.org/wiki/Object_oriented_design
Stell nochmal eine konkrete Frage, dann kann ich vermutlich mehr sagen.
Gruß,
Kai
> echo <table><tr> <td> $topic></td>$from>
Wer so eine Kacke noch ernsthaft professionell verwendet sollte sich
darüber Gedanken machen ob nicht ein rostiger Nagel im Knie angenehmer
wäre.
Sinnvollerweise trennt man Logik und Markup mithilfe eines
Templatesystems wie Smarty voneinander und erleichtert sich das Leben
damit mindestens um einen Faktor 100.
jo schrieb:
> Hallo!> Wie ist das bei PHP und der Objektorientierung: benutzt man sie in> Projekten oft,
Ja, sehr oft sogar. Schau mal für Spaß in Quelltexte von großen
Projekten, etwa Mediawiki, das Woltlab-Board und so weiter.
> oder bleibt man eher nah an der Datenbank?
Die meisten Projekte erfinden eine eigene Datenbank-Kapselung. PHP lässt
einen da ziemlich hängen, es gibt zwar hundert verschiedene
Datenbank-Schnittstellen, aber die existieren alle parallel, werden
teilweise nicht gepflegt, sind nicht fertig und so weiter.
Manchmal geht es auch nicht nur darum, etwas möglichst einfach zu
gestalten. Viel wichtiger ist eine saubere Kapselung, um nachher
vernünftige Reviews hinzukriegen, um den Quelltext sauber warten und
pflegen zu können etc.
Falls du offen für Alternativen bist, könnte ich dir Django empfehlen:
http://www.djangoproject.com/
Wenn du mal einige Zeit mit PHP-Projekten zu tun hattest, wird dir
Django wie eine Erleuchtung vorkommen. Der Datenbank-Layer von Django
ist einfach toll. Du definierst dir in einer einzigen Datei die Klassen,
die deine Daten modellieren.
Dass dann die Tabellen in der Datenbank dazu passen, erledigt Django
ganz von selbst. Die SQL-Abfragen, um die Daten aus der Datenbank in die
Objekte zu lesen oder die Objekte in die Datenbank zu schreiben, erzeugt
Django auch automatisch.
Christopher D. schrieb:
>> echo <table><tr> <td> $topic></td>$from>>> Wer so eine Kacke noch ernsthaft professionell verwendet sollte sich> darüber Gedanken machen ob nicht ein rostiger Nagel im Knie angenehmer> wäre.> Sinnvollerweise trennt man Logik und Markup mithilfe eines> Templatesystems wie Smarty voneinander
Man trennt meist in Darstellungslogik (View) und Anwendungslogik (Model,
Controller).
Alle Versuche Logik und Markup zu trennen laufen so ab: am Anfang baut
man ein Templatesystem das simple Platzhalter ersetzt; dann will man
Listen darstellen und merkt dass man einfache Iterationskonstrukte
braucht; später will man einfache Verzweigungen realisieren und baut ein
if-Konstrukt ein; noch später will man so einfache Dinge tun wie Strings
escapen oder Leerzeichen entfernen, also baut man Unterstützung für
Funktionen ein; und irgendwann merkt man dann dass man dabei ist PHP in
PHP neu zu schreiben. Smarty ist diesem Ziel schon so nahe gekommen,
dass wohl man ein neues Templatesystem in Smarty schreiben könnte.
Kleine Veranschaulichung:
Smarty:
1
{foreach from=$myArray key=k item=v}
2
<li>{$k}: {$v|strip}</li>
3
{math equation="height * width / division"
4
height=$row_height
5
width=$row_width
6
division=#col_div#}
7
{/foreach}
PHP:
1
<? foreach $myArray as $k => $v: ?>
2
<li><?= $k ?>: <?= strip($v) ?></li>
3
<?= height * width / division ?>
4
<? endforeach; ?>
@jo: Wenn du ernsthaft mit PHP entwickeln willst, verwende ein Framework
wie CakePHP.
Hallo! Danke für Eure Antworten...
ich glaube insgesamt ist mein Konzept nicht gut angekommen.
Wie, wenn nicht mit dem Befehl echo "baut" man denn dann die Seite auf
dem Browser aus bzw. schickt den HTML Code rüber?
Gibt es einen anderen Befehl, und was spricht gegen den Einsatz von
echo?
Du kannst z.B. das DocumentHere Format nehmen. Das sieht in etwa so aus:
echo <<< TEMPLATE
<html>
...
</html>
TEMPLATE;
Alternativ setzt Du den HTML Text innerhalb der <?php ... ?> Tags und
benutzt als Platzhalter einfach Variablem, z.B. $status... Die Variablen
werden dann entsprechend ersetzt...
Ich habe das Gefühl, dass manche hier mit Frameworks und Begriffen
rumprallen ohne selbst viel Ahnung oder Erfahrung zu haben.
OOP lohnt sich bei größeren Projekten, wenn es darum geht Überblick zu
behalten. Ein Vorteil von OOP ist auch wenn mehrere Entwickler an einem
Projekt arbeiten. So benutzt der Eine die Klasse vom Anderen ohne sich
mit dem Code auseinander setzen zu müssen. Parameter rein, Daten raus.
Oft sind die Klassen auch skalierbar und einfach zu erweitern.
Wenn du eine quick and dirty Lösung für z.B. private Seite brauchst, wo
man sich die Bilder deiner Brifmarken angucken kann, kann man getrost
auf OOP verzichten. Der Planungs und Umsetzungsaufwand mit Einbezug von
Frameworks und Templatesystemen lohnt sich nicht. Also lass dich nicht
von sinnlosen Kommentaren wie:
>Wer so eine Kacke noch ernsthaft professionell verwendet sollte sich>darüber Gedanken machen ob nicht ein rostiger Nagel im Knie angenehmer>wäre.
oder
>Aus dem Grund setz ich bei der Inhaltstrennung recht gerne auf XML und>XSLT :-D
nicht entmutigen :)
Bei Zend gibt es eine Codeecke (achtung, nciht alles ist wirklich sauber
gelöst und gut). Kannst dir da paar Klassen angucken um besser zu
begreifen wann sich der Aufwand lohnt.
http://www.zend.com/code/codex.php