php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 22-06-2007, 11:41
Mean
 Registrierter Benutzer
Links : Onlinestatus : Mean ist offline
Registriert seit: Jun 2007
Beiträge: 7
Mean ist zur Zeit noch ein unbeschriebenes Blatt
Standard [OOP] Forum neu Programmierung mit Container-Klasse

Hallo,

ich habe ein kleines Forum gebastelt, das in einem Mitgliederbereich läuft - der Mitgliederbereich besteht aus den 20 Mitgliedern unseres Clubs, also nichts großes.

Nun will ich den Mitgliederbereich neu programmieren - bin Informatikstudent und habe ein paar neue Programmiertechniken gelernt während des Studiums, die ich jetzt gerne praktisch anwenden möchte.

Das Forum ist so aufgebaut:

-> Kategorie 1 (fest, kann nur von Admin hinzugefügt werden)
-> Forum 1 (fest, kann nur von Admin hinzugefügt werden)
-> Thema 1 (kann von jdm. Mitglied erstellt werden)
-> Beitrag 1 (kann von jdm. Mitglied erstellt werden)
-> ...
-> Thema 2
-> ...
-> Forum 2 (...)
-> ...
-> Forum 3 (...)
-> ...
-> Kategorie 2 (...)
-> Forum 1 (...)
-> ...
-> ...
-> Forum 2 (...)
-> ...
-> Kategorie 3 (...)
-> Forum 1 (...)
-> ...

Nur mal so zum Überblick. Nun würde ich gerne mit einer Containerklasse arbeiten, die dann die einzelnen Kategorien, etc. enthält. Nun aber schon das 1.Problem: Zum Zeitpunkt, an dem ich die Kategorien aus der DB abrufe muß ich ja auch die Foren abrufen. Diese will ich dann zu den Kategorien packen (also daß jede Kategorie in ihrem Objekt die Unterforen enthält).

Ist es nun sinnvoll, das ganze so zu lösen (mit einem Conteiner - denke, wenn ich es auf die 2.Art löse brauche ich da auch nicht mehr - und einer Klasse, wo ich dann alle Kategorien, Foren, Themen, etc. reinpacken kann? Oder soll ich für jeden Bereich Kategorien, Themen, Beiträge,... eine eigene Klasse basteln, die speziell darauf zugeschnitten ist?

Hier mal das Codebeispiel von mir:
Code:
<?php
class ForumContainer {

	public $cont					= array();

	public function __construct($obj = '') {
		if(!empty($obj))
			$this->Add($obj);
	}
	
	public function Add($obj) {
		$a							= count($this->cont);
		$this->cont[$a]				= $obj;
		return;
	}
	
	public function getCont() {
		return $this->cont;
	}
	
	public function Count() {
		return count($this->cont);
	}
	
	public function __destruct() {
		unset($this->cont);
	}
}

class ForumParts extends ForumContainer{

	private $title;					// Titel
	private	$text;					// Text oder Beschreibung
	private	$time;					// Erstellungszeitpunkt
	private	$author;				// Autor
	private $nrChildren;			// Anzahl an Kindelementen
	private	$parent;				// Was ist das Elternelement

	public function __construct($aID,$aTitle, $aText, $aTime, $aAuthor, $aNrChildren, $aParent = '') {
		$this->id					= $aID;
		$this->title				= $aTitle;
		$this->text					= $aText;
		$this->time					= $aTime;
		$this->author				= $aAuthor;
		$this->nrChildren			= $aNrChildren;
		$this->Parents				= $aParent;
	}
	
	public function getID() {
		return $this->id;
	}
	
	public function getTitle() {
		// Umwandlung der Umlaute und ß
		return $this->title;
	}
	
	public function getText() {
		// Umwandlung der Umlaute und ß
		// Umwandlung der Links, Bilder,..
		return $this->text;
	}
	
	public function getTime() {
		// Umwandlung in lesbares Datum
		return $this->time;
	}
	
	public function getAuthor() {
		return $this->author;
	}
	
	public function getNrChildren() {
		return $this->nrChildren;
	}
	
	public function getParent() {
		return $this->parent;
	}
	
	public function __destruct() {

	}
}

$kategorien	   = new ForumContainer();
$kategorien->Add(new ForumParts('1','Kat1','','10000000000', '1','5'));
$kategorien->Add(new ForumParts('2','Kat2','','10000000000', '1','3'));

$arr = $kategorien->getCont();

$arr[0]->Add(new ForumParts('1','Forum1','Desc1 (in Kategorie 1)','10000000000', '1','5','1'));
$arr[0]->Add(new ForumParts('2','Forum2','Desc2 (in Kategorie 1)','10000000000', '1','3','1'));
$arr[0]->Add(new ForumParts('3','Forum1','Desc1 (in Kategorie 2','10000000000', '1','5','1'));

for($i = 0; $i < count($arr); $i++) {
	echo $arr[$i]->getTitle();
	$test = $arr[$i]->getCont();
	echo '<ul>';

	foreach($test as $value) {
		echo '<li>';
		echo $value->getTitle();
		echo '</li>';
	}
	echo '</ul>';

}
?>
Ich hoffe, ihr wisst, was ich meine... Vielleicht könnt ihr mir auch einfach nur einen Tipp geben, wie man sowas einigermaßen professionell löst. Man will sich ja immer verbessern und dazu lernen

Danke und Grüße,

Marc
Mit Zitat antworten
  #2 (permalink)  
Alt 22-06-2007, 22:16
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Sorry, aber OOP ist nicht dafür ausgedacht worden um die Leben noch schwiriger zu machen.
Ich sehe überhaupt kein Sinn von deiner classe ForumContainer, weil
1)ein Mehrdemensionaler Array ist nichts anderes als ein Container
2)Der ganzer Zusammenhang zwischen Beiträgen, die du mit den komischen Werten ''Forum1','Desc1'" ( Parametern 2 und 3) bei ForumParts darstellen willst, werden normale weise durch die refferencen gemacht.
3)Man schreibt die classen
3.1) um sie in zukunft verwenden zu können
3.2) um die funktionstüchtige classen zu überschreiben und dadurch Ihr funktionalität zu erweitern
3.3)um die forgeschriebene funktionen die in einem Interface oder Abstracter classe steckt konsequent implementieren.
3.4)weil anderes einfach nicht geht(Java, C#)

Erkläre mir bitte jetzt welche Sinn von oben aufgelisteten, deine classe ForumContainer hat?
4)Die ganze struktur, die du darstellen willst, kommt vermutlich aus DB.
DB ist auch OOP, da du jede Tabelle als ein Object betrachten kannst.
Mit 10 Zeilen von Quelltext, der in eine einzige Methode gepackt wird, kannst du die Ganze struktur direkt im Browser ausgeben.
Die ganze Struktur, die du gebastelt hast, ist eigentlich nur dafür ausgedacht wurde, um dem User am ende der Inhalt zum Browser senden, danach braucht man kein Container mehr.
muss man wirklich für aufbau so einen Container mehr Aufwand für erzeugen von Container betreiben, als für den wirklichen Sinn und Zweck von der Anwendung?
-------------------
Ich kann nicht ausschlissen, dass ich nicht ganze Idee verstanden habe, aber so wie es Aussieht versuchts du absolut Grundlos aus der einefacher Ausgabe eine super-Abstractionsschicht aufzubauen und zwar so tüchtig, dass du vergessen hast wofür es am ende dient.

Bitte betrachte mein Beitrag nicht als persönliche Kritik.

__________________
Slava
bituniverse.com

Geändert von Slava (22-06-2007 um 22:23 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 22-06-2007, 22:50
Mean
 Registrierter Benutzer
Links : Onlinestatus : Mean ist offline
Registriert seit: Jun 2007
Beiträge: 7
Mean ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi Slava,

danke für die Antwort! Ist auch immer interessant die Meinung von anderen (die sich wahrscheinlich besser auskennen mit PHP als ich) zu lesen.

Nachdem was du schreibst ist OOP in PHP dann ja sowieso total unnötig - die Daten kommen zu 99% aus Datenbanken, können nicht auf andere Seiten übernommen werden,... Oder verstehe ich das falsch?

Könntest du vielleicht ein Beispiel nennen, wo es sinnvoll wäre?

Vielen Dank und Grüße,

Marc
Mit Zitat antworten
  #4 (permalink)  
Alt 22-06-2007, 23:37
ArSeN
 Registrierter Benutzer
Links : Onlinestatus : ArSeN ist offline
Registriert seit: Feb 2006
Ort: Berlin
Beiträge: 1.052
ArSeN ist zur Zeit noch ein unbeschriebenes Blatt
ArSeN eine Nachricht über ICQ schicken ArSeN eine Nachricht über AIM schicken ArSeN eine Nachricht über Yahoo! schicken
Standard

OffTopic:
Yes! Endlich mal wieder ein neues Rad! Geil!
__________________
Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.
Mit Zitat antworten
  #5 (permalink)  
Alt 22-06-2007, 23:43
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Mean
Nachdem was du schreibst ist OOP in PHP dann ja sowieso total unnötig - die Daten kommen zu 99% aus Datenbanken, können nicht auf andere Seiten übernommen werden,... Oder verstehe ich das falsch?
kann ich so nicht unterschreiben.
webapplikationen basieren meist auf http, welches ein zustandsloses protokoll darstellt. das ist auch der große unterschied zu applikationen, die auf deinem desktop laufen.
die webapp wird bei einem http-request gestartet und danach wieder beendet, bis zum nächsten browser-request.
um einen client wiederzuerkennen, hat der php-gott sessions erfunden. in der session kannst du u.a. auch deine objekte serialisiert ablegen und bei einem erneuten request des selben clients "wiederbeleben".

mehr hintergrundwissen unter: http://www.develnet.org/101.html
Mit Zitat antworten
  #6 (permalink)  
Alt 23-06-2007, 00:26
Mean
 Registrierter Benutzer
Links : Onlinestatus : Mean ist offline
Registriert seit: Jun 2007
Beiträge: 7
Mean ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für die zahlreiche Beteiligung!

Wegen dem serialize: das kennte/kannte ich schon, wobei ich da bisher nur darüber gelesen habe, daß man das für Objekte normal nicht einsetzt...

D.h., ich lege z.B. in (m)einem Mitgliederbereich einen Benutzer-Objekt an (wenn dafür kein OOP verwendet wird, wofür dann?) und halte das dann die ganze Zeit, die er eingeloggt ist, über die Session am Leben!?!?!

Aber warum sind denn z.B. Foreneinträge keine Objekte? Objekte sind für mich Dinge, die Eigenschaften (=Attribute) haben. Sei es nun ein Auto, ein Mensch oder eben ein Foreneintrag... Ich bastle mir doch damit auch eine Schablone, die ich dann auf alle Foreneinträge anwende, z.B. um den Text von BB-Code zu befreien, das Datum von Times in Date zu verwandeln,...?!?!

Grüße,

Marc
Mit Zitat antworten
  #7 (permalink)  
Alt 23-06-2007, 00:30
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die Beiträge sind super als Objekte. Ich denke es ging Slava um diese Container-Klasse, die ja nichts tut was ein einfaches Array nicht auch kann.

Zu dem Benutzerobjekt: sicher ist es praktikabler, das bei Bedarf neu wieder herzustellen (z.B. anhand der Benutzerid in der Session), anstatt es komplett in die Session zu schreiben.

Bei sowas wie Warenkörben könnte das ev. nützlich sein (obwohl sicher auch da die Warenid und die Menge oder sowas reichen würden).
__________________
ich glaube
Mit Zitat antworten
  #8 (permalink)  
Alt 23-06-2007, 04:43
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von Mean

Könntest du vielleicht ein Beispiel nennen, wo es sinnvoll wäre?

Eine Mail, SMTP,HTTP-Client oder andere Classen, die uns erleichtern entweder ein besseren Übersicht oder aufwändiger und verborgener Funktionalität greifbar zu machen.
Wenn du meinst, dass die classe ForumParts für deine Anwendung benötigt wird, dann mach es auch. Aber warum muss diese classe von nutzlosem ForumContainer abgeleitet sein, ist für mich wirklich ein rätsel.
$ForumContainer=array(); tut nichts anderes als deine classe, die einfach die vertrauten array-funktionen dekoriert.
Wenn du die Interresse hast, der richtiger OOP Ensatz bei PHP kennenlernen, dann würde ich dir Zend-Framework als guter Beispiel nennen. Da sind die classen dafür ausgedacht um eine Anwendung schnell und Übersichtlich zu entwickeln.
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #9 (permalink)  
Alt 23-06-2007, 18:46
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Eine sinnvolle Kapselung des Forums in eine Klasse wäre das verarbeiten der SQL-Query an die Datenbank. Also eine Klasse mit den Methoden

holeKategorie( id )
speichereKategorie( id, daten )
erstelleKategorie( daten )

usw.

So kapselst du logisch zusammenhängende Programmabschnitte und dein Code wird leserlicher. Das wäre eine sinnvolle Forum-Klasse!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:31 Uhr.