Such gutes Class Tutorial
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
beispiel
code
controller
datei
erstellen
frage
funktion
http
klasse
muster
null
objekt
paar
problem
projekt
show
suche
url
verstehen
-
Moin,
ich suche aktuell ein wirklich umfangreiches Tutorial für PHP-Klassen, alles was ich bis jetzt gefunden habe ist eher unvollständig, beschreibt nur wie Klassen anzuwenden sind und was die Vorteile sind. Aber nicht wie man Klassen vernünftig erstellt. Mir geht es nicht um die pure Theorie, sonst würde ich im PHP-Manual nachschlagen, sondern um ein echtes Tutorial.
Danke auf jeden Fall schon mal für Eure Hilfe. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wie man eine Klasse erstellt? Das steht doch im PHP Handbuch...
Du kannst Klassen als Datenkontainer oder als Funktionelement oder für beides zusammen nutzen. Das kommt ganz auf dein Objekt Design an. In der Regel versucht man schon MVC anzuwenden was aber meist mit gewissen Abweichungen implementiert wird.
Bei dem Framework das ich vor einiger Zeit für Betriebsprojekte geschrieben habe sieht der Basis-Controller wie folgt aus. Ist nicht ganz perfekt, aber er genügt mir zur Zeit.
<?php abstract class WDFPage { protected $tpl = null; // Template Object protected $sql = null; // SQL Object protected $act = null; // page action protected $htmlPage = '404'; // our template private $controller = null; public function __construct(&$tpl, &$sql = null, &$act) { $this->tpl = $tpl; $this->sql = $sql; $this->act = $act; } public function execute() { } public function setPageController(WDFPage &$controller) { $this->controller = $controller; } public function &getPageController() { return $this->controller; } public function show() { if ($this->controller !== null) { $this->controller->tpl->assign('contentFile',$this->controller->htmlPage.'.tpl.php'); $this->controller->tpl->display('application.tpl.php'); } else { $this->tpl->assign('contentFile',$this->htmlPage.'.tpl.php'); $this->tpl->display('application.tpl.php'); } } } ?>
Die Logik der jeweiligen Seiten, zb. Registrieren.php findet dann in der RegistrierenPage Klasse statt die von der WDFPage erbt und die execute() Methode überschreibt. Je nach Projekt und Anforderungen kann man auch eine weitere Basisklasse schreiben die alle notwendigen Dinge kapselt.
Die show() wird hier über PHPs register_shutdown_function() ausgeführt. Sehr praktisch sowas ^^
//sollte in einer Datei liegen die immer inkludiert wird... $pageController = new $pageControllerClass($tpl,$sql,$act); // call the specific page controller class register_shutdown_function(array(&$pageController,'show'));
Beitrag zuletzt geändert: 6.5.2009 9:27:55 von evil-devil -
Hmm ich nehme mal an, dass es dir nicht darum geht, wie eine Klasse im Quellcode aussieht, sondern eher wie man Klassen verschachtelt bei bestimmten Situationen.... ein sogenanntes Gebrauchsmuster/Entwurfsmuster
Das Schlagwort dazu wäre "Patterns, Entwurfsmuster" bei Google. ...dann dürftest du so Muster wie Observer-Muster, Factory-Muster usw.
siehe auch http://de.wikipedia.org/wiki/Entwurfsmuster
Grüßle
Beitrag zuletzt geändert: 6.5.2009 11:11:59 von scout -
Danke für Eure Antworten, nur bringt mich das nicht wirklich weiter. Kann aber daran liegen das ich mich nicht verständlich genug ausgedrückt habe.
Ich suche ein Praxisorientiertes Tutorial dass anhand eines Beispiels die Erstellung einer Klasse erklärt, da ich so das ganze besser verstehen kann, weil die pure Theorie mir einfach zu trocken ist.
-
Was am erstellen einer Klasse verstehst du denn nicht? Eine Klasse ist nichts anders als eine Vorlage für etwas. Was da drin ist kommt auf die Situation an. In meinen Projekten hab ich zb. immer ein SessionUser Objekt das mir die grundlegenden Dinge vom Benutzer (id, vorname, nachname, email, benutzername) speichert und ich somit leichter auf die Daten zugreifen kann. Dann kann man sich eine Login Klasse schreiben die den LoginProzess für einen übernimmt und viele andere Dinge.
Ohne praktisches Beispiel deinerseits können wir hier viel schreiben. Du musst eigentlich nur OOP verstehen ;) -
Irgend wir habe ich das Gefühl dass ich eine fremde Sprache spreche.
Ich brauch einfach nur ein gescheites Tutorial betzüglich OOP mit ein paar Praxisbeispielen um das Ganze besser zu verstehen. Die Tutorials die ich bis jetzt gefunden habe zeigen nur auf was eine Object ist und nicht wie man sie erstellt und richtig damit umgeht. Hier auf Lima habe ich bis jetzt nur nen Tutorial gefunden wo die Funktionsweise einer Klasse anhand von Hund und Katze erklärt wird, aber keine wirklichen Beispiele hat.
Wie man Klassen anwendet weiß ich ja, ich halt nur für ein paar meiner Projekte eigene Klassen entwickeln da sich viele Elemente bei meinen Projekten wiederholen. Zum Beispiel verwende ich immer wieder das gleiche (selbst entwickelte) Templatesystem und immer das selbe Fehlersystem (Fehlercodes). Das ganze wollte ich nun schön kompakt in eine Klasse schmeißen, damit ich ein wenig schneller arbeiten kann. -
Das alles in eine Klasse zu schmeißen wäre das dümmste was du tun kannst. Objekt Orientierte Programmierung ist ja gerade dazu da, dass man von sich geschlossene Objekte erstellen kann.
Wg. Tutorial empfehle ich dir OOP Tutorials zu suchen. Egal ob die für C/C++, Java oder einer anderen Sprache sind.
... Schau dir mal in Wikipedia die weiterführenden Links zum Thema OOP an. Dort sollten denke ich soweit man das beim überfliegen sehen konnte genug Beispiele bei sein.
Hier noch nen Beispiel aus nem Framework:
SQLFactory <-- Singleton das die angeforderte SQLInstanz erzeugt und verwaltet.
SQL <abstract> <-- Basisklasse für SQL Operationen, ähnlich PDO
-> MySQL (von SQL abgeleitet) <-- überschreibt die von SQL definierten Funktionen und führt in diesen die jeweiligen php mysql Funktionen aus.
SQLStatement <-- Ergebnisobjekt nach einer SQL Operation
-> MySQLStatement (von SQLStatement abgeleitet) <-- setzt in den Funktionen die notwendigen php mysql Funktionen ein um das Resultset zu verarbeiten
Wenn man das nun einsetzen will, definiere ich in der Config Datei lediglich den Pfad zur MySQL Klasse und hole mir über SQLFactory::getInstance() eine Instanz auf die MySQL Klasse.
Ob da aber nun MySQL, MSSQL oder ganz was anderes zurückkommt kann mir fast egal sein. Denn ich bekomme nur das zurück was ich angefordert habe. Brauche ich eine andere Instanz, würde ich entweder die Config ändern oder ähnlich wie in Java per Classloader die Klasse dynamisch anfordern. Prinzipiell erzeugt die SQLFactory die Klasse auch schon dynamisch
... if (self::$sqlInstance === null) { self::populateSQLDrivers(); // do a dynamic import import("./de/mmpg/sql/".WDFSystem::$sqlType."/",WDFSystem::$sqlType); self::$sqlInstance = new WDFSystem::$sqlType(); } ...
-
Saya sedang mencari tutorial praktis untuk oop di PHP, tidak lebih atau kurang. (Ich suche nach einem Praxistutorial für OOP in PHP, mehr nicht und auch nicht weniger.)
Hoffentlich versteht Ihr mich jetzt -.-
Beitrag zuletzt geändert: 7.5.2009 10:43:10 von strange -
Wir verstehen dich, aber du scheinbar uns nicht. Es gibt kein Praxis Tutorial!
Es gibt OOP Pattern, Best Practice und ähnliche Dinge. Um OOP zu verstehen und zu benutzen muss man es anwenden. Du kannst von mir aus auch erstmal Java lernen, das komplett auf OOP setzt, aber das wird dir denke ich auch nicht direkt weiterhelfen.
OOP kann man nicht von heute auf morgen lernen, das ist ein Prozess der einige Zeit in Anspruch nimmt. -
strange schrieb: Irgend wir habe ich das Gefühl dass ich eine fremde Sprache spreche.
Nunja das Problem ist halt...was ist ein Praxistutorial ?
Es gibt Tutorials zum Klassenaufbau, die beschreiben wie Klassen generell aufgebaut sind. Und es gibt Entwurfsmuster die beschreiben, wie man Klassen gekonnt verschachtelt für alltägliche - meist immer wiederkehrende - Aufgaben.
Um dir zu helfen, würde ich vorschlagen, dass du einfach mal diene Fragen, die zu Klassen auftreten, hier uns gebündelt zur Verfügung stellst. Wir werden dir dann dazu Antworten bzw. Links, Tutorials usw. liefern.
ok?
Grüßle -
Das ist garnet so einfach, ihr sagt ja das ich Grundsätzlich nicht alles in eine Klasse schmeißen soll. deswegen würde ich als erstes mal mit meine Templateengine anfangen, die zum großen Teil nur aus Funktionen besteht. Sie arbeitet mit str_replace() und wird durch benutzerdefinierte Tags (z.B. "{logo}") gefüttert.
Aktuell gibt es 2 Funktionen plus eine kurze Konfig, die nur die Anfangs- und Endzeichen der Tags bestimmen. Die eine Funktione sucht nach dem Tag und ersetzt es durch den mit übertragenen Inhalt (array) und die andere löscht alle Tags aus dem Template, die noch nicht ersetzt wurden. Nachteil: Man muss sich schon sehr genau überlegen welche Tags man verwendet, da man sonst mit HTML, etc, kollidieren kann. Aber das ist erst mal egal, da ich das System eh nur für meine Projekte verwende, ggf. werde ich es später noch einmal umschreiben um es zu veröffentlichen.
Jetzt ist halt nur die Frage wie verstaue ich das alles möglichst inteligent in eine Klasse und wie verwendet man sie dann am besten? Wenn ich dafür ein Tutorial hätte, würde ich schon einen ganzen Schritt weiter sein als ich jetzt grad bin. Die einzige Klasse die aktuell verwende ist die MySQLi Klasse und die habe ich hoffentlich schon ganz gut im Griff. -
Ich seh jetzt gar nicht so dein Problem, ich würde das einfach so machen, wie es MyBB ;)
class templates { /** * Cache the templates. * * @param string A list of templates to cache. */ function cache($templates) { global $db, $theme; $sql = $sqladd = ""; $names = explode(",", $templates); foreach($names as $key => $title) { $sql .= " ,'".trim($title)."'"; } $query = $db->simple_select("templates", "title,template", "title IN (''$sql) AND sid IN ('-2','-1','".$theme['templateset']."')", array('order_by' => 'sid', 'order_dir' => 'asc')); while($template = $db->fetch_array($query)) { $this->cache[$template['title']] = $template['template']; } } function get() { /* Hier steht dann dein Code */ } }
Es gibt übrigens auch die Funktion eval, mit der du nachträglich PHP-Code ausführen kannst, sprich Variablen ersetzen, bzw. Userfunktionen ausführen
Bsp.
$template = <<<eot <html> <body> <p>{$hallo}</p> <p>{$class->toll()}</p> </body> </html> eot; eval("\$template = \"".$template."\";");
-
Ich habe auch kein Problem mit einem Templatesystem, ich will nur wissen wie man sowas am besten in einer Klasse verstaut und anwendet. Ziel der Übung ist dass ich Klassen besser verstehe und selber welche erstellen kann, ohne das dabei Murks raus kommt.
-
Naja, vielleicht solltest du den Ansatz anders wählen. Zunächst eine Ist-Analyse deines Template Systemes machen.
Was für Variablen gibt es auf die von außen zugegriffen werden muss. Welche Funktionen müssen sichtbar sein. Welche Variablen sind nur intern zu nutzen und kann man einzelne Bereiche des Template Systems auf weitere Objekte (was anderes sind Klassen nach der Instanzierung ja nicht) anwenden.
Nach erfolgreicher Ist-Analyse hast du einen Haufen Daten und kannst daraus deine Klasse(n) modellieren. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage