Diese Anzeige ist nur für
Nicht-Mitglieder sichtbar!

Jetzt kostenlos registrieren

PHP und OOP, ein ein paar Probleme

Fragen zum Thema PHP können hier gestellt werden

Moderatoren: Basti, Guillermo, Andreas W.

PHP und OOP, ein ein paar Probleme

Beitragvon Coke am 23.01.2012, 20:47

Moin,
also ich hab mir mal vor einiger Zeit eine kleine CMS mit PHP gebastelt, wo man im adminpanel, nachdem man sich eingeloggt hat, die möglichkeit hat Menüpunkte für die Hauptseite erstellen, verändern und mit Content füllen kann. Eigentlich nichts großes.
Schön habe ich das nich wirklich umgesetzt, ich habe alle Funktionenalitäten (menüpunkt erstellen etc.) einfach alles in eine datei geschrieben. Nun kann man sich vorstellen, wie der code der Datei aussieht. Einfach zu viel code, unübersichtlig und unstrukuriert.
Das wollte ich nun ändern und wollte aus diesem Anlass auch auf OOP umsteigen.
Ich hab mir zu OOP jetzt ein bisschen was durchgelesen etc..
Trotzdem hab ich das Problem das alles in der Praxis umzusetzen. Es fängt schon an bei den Klassen, ich weiß einfach nicht wie ich die Funktionalitäten in Klassen einteilen soll. Soll ich einfach eine Klasse "create_menu.php" erstellen und "edit_menu.php" erstellen und die funktionen/methoden dort reinschreiben? Könnt ihr mir ein paar Tipps geben wie man solch ein Problem am besten angeht?
Ich hoffe ich finde hier ein wenig Unterstützung.

Mfg
Coke
Mitglied
 
Beiträge: 31
Registriert: 12.01.2010, 20:10
Diese Anzeige ist nur für
Nicht-Mitglieder sichtbar!
 
Jetzt kostenlos registrieren

Re: PHP und OOP, ein ein paar Probleme

Beitragvon Guillermo am 23.01.2012, 21:17

Hi Coke,

gute Idee, ich kann mir wirklich vorstelln dass es da a bisserl unübersichtlich gworden ist :D
Wenn du schon die Beispiele "create_menu" und "edit_menu" vorbringst: Das Ziel der objektorientierten Programmierung ist Objekte aus der "realen"/realen (:D) Welt zu abstrahieren. In deinem Beispiel würde sich also eine Klasse "Menu" anbieten. innerhalb dieser Klasse wären dann Methoden "insertLink(...)", "deleteLink(...)", "moveLink(...)" sinnvoll. Was die Methoden machen ist denke ich klar, da mnemonische Namen gewählt wurden (d.h. selbsterklärende). Je nach Objekten die du auf der Seite verwenden willst kannst du diese meist so umsetzten. Dann gibt es natürlich noch Klassen die nicht unbedingt ein "reales" Pendant haben, wie eine Datenbankklasse, Fehlerbehandlungklasse usw..
Wir stehn dir bei deinen ersten Schritten gern zur Seite, am besten ist es du zeigst uns deine Strukturierungsideen und Fortschritte.

Viele Grüße,
Guillermo
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Moderator
 
Beiträge: 1093
Registriert: 01.10.2007, 18:18
Wohnort: Bayern

Re: PHP und OOP, ein ein paar Probleme

Beitragvon Coke am 23.01.2012, 22:53

So, erstmal vielen Dank für deinen Beitrag.
Ich hab jetzt ersteinmal eine grobe Strukture gemacht, ohne dass ich irgendwas groß programmiert hab.

menu.php
Hab es gemacht, so wie du es vorgeschlagen hast, mit den Methoden insertMenu, editMenu, deleteMenu etc.

config.php
Das ist die Klasse die für die Datenbankverbindung zuständig ist

login.php
Die Klasse die für das einloggen verantwortlich ist.

db.php
Ich weiß nicht ob das soo sinnvoll ist, zumindest würde es mir code sparen und ich denke auch dadurch würde es übersichtliger werden. Dort sind Datenbankabfragen, Insert, Delete, Update, etc. Was man halt so braucht.

admincp.php
Das ist das Adminpanel, wo quasi alle Klassen und Methoden zusammengeführt werden.


Wie schaut das erst einmal aus?
Dennoch hab ich noch ein paar Fragen die mir auf dem Herzen liegen.
Für die Methoden in der menu Klasse, gibt es natürlich auch HTML Formulare, kommen die mit in den jeweiligen Methoden oder macht dafür eine extra Klasse?
Wie genau soll ich die Klassen mit einander Verbinden? Mit Vererbung? Oder kann ich die Klassen nicht einfach includen? Scheint mir irgendwie einfacher...

Mfg :)
Coke
Mitglied
 
Beiträge: 31
Registriert: 12.01.2010, 20:10

Re: PHP und OOP, ein ein paar Probleme

Beitragvon Guillermo am 23.01.2012, 23:19

Hey Coke,

die Aufteilung ist schon mal nicht schlecht, trotzdem hab ich vielleicht noch ein paar Anregungen. Die Klassen "config" und "db" Kannst du zusammenführen. Du kannst z.B. eine "connect()" Methode machen mit der du dich verbindest, restliche Methoden die du schon erwähnt hast bedienen sich dann dieser Verbindung.
Statt einer "login"-Klasse würde ich eine "Administrator"-Klasse erstellen z.B. mit den Funktionalität "Administator erstellen" "Rechte hinzufügen/löschen/ändern", "Profil ändern (Benutzername, Passwort usw.)" und natürlich auch eine Funktion "login" und "logout".
Als Hauptstruktur für dein System könntest du z.B. - da du ja OOP betreibst - eine Klasse Modul schreiben, die die typischen Moduloperationen beinhaltet (Modul installieren, exportieren (?), Welcher Administrator darf auf das Modul zugreifen ...). Wenn du dann ein konkretes Modul implementieren willst erstellst du dir eine neue Klasse die von der Modulklasse erbt, und kannst ggf. Operationen (z.B. Installieren) überschreiben weil die Installation verschiedener Module vielleicht verschiedene Vorgehensweisen erfordert.
Für den Anfang kannst du erstmal deine benötigten Klassen ganz klassisch via "include" oder besser "require(_once)" einbinden.
Die Formulare sollten nicht mit in die Klassen eingearbeitet werden. Vorstellbar wäre hier wiederrum eine Formularklasse, die Fomulare erzeugen kann und ausgeben kann und die Daten aus den Formularen auslesen und für weitere Verwendung mit deinen Klassen vorbereitet.

Zu deiner Notation: In der OOP ist es geläufig Klassen sowie Interfacebezeichnung groß zu schreiben, also "class Admin (z.B. in einer Admin.php)". Früher haben PHP Entwickler ihre Klassen wohl klein geschrieben und mit einem ".class.php" als Suffix (z.B. "Admin.class.php" im Dateinamen versehen, ist glaube ich jetzt aber nicht mehr so verbreitet.

Viele Grüße,
Guillermo

Nachtrag:
Ein ganz heißer Tipp für dich könnte PHP Classes sein, da kannst du dir mal ein paar Klassen anschaun oder ggf. welche davon verwenden, z.B. eine Fomularklasse. So bekommst du vielleicht auch ein Gefühl dafür was sich in eine Klasse gehört und was nicht und wie andere Entwickler das handhaben.
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Moderator
 
Beiträge: 1093
Registriert: 01.10.2007, 18:18
Wohnort: Bayern

Re: PHP und OOP, ein ein paar Probleme

Beitragvon Coke am 24.01.2012, 22:12

Okay, hab es nun so gemacht, wie du es Vorgeschlagen hast :)
Hab außerdem eine Klasse Validation, um Strings auf bestimmte Kriterien zu Überprüfen. Macht denke ich auch Sinn.

Nachdem eine grobe Struktur fertig ist, werde ich dann mal mit der Implementation anfangen. Ich hoffe ich kann mich hier nochmal melden, fals Probleme und Fragen auftreten. :)

Mfg
Coke
Mitglied
 
Beiträge: 31
Registriert: 12.01.2010, 20:10

Re: PHP und OOP, ein ein paar Probleme

Beitragvon Coke am 25.01.2012, 15:24

Ich hätte da noch eine Frage zu Getter und Setter Methoden. Diese benutzt man ja innerhalb der Klassen. Soll man für jede Variable in der Klasse die man außerhalb der Klasse braucht eine Getter bzw. Setter Methode schreiben? Ich hoffe ihr versteht was ich meine.
Coke
Mitglied
 
Beiträge: 31
Registriert: 12.01.2010, 20:10

Re: PHP und OOP, ein ein paar Probleme

Beitragvon Guillermo am 25.01.2012, 19:43

Da kommt darauf an wie du die Variablen verwendest. Wenn du eine Variable von außen bearbeiten können willst, man sie aber später von außen nicht mehr braucht, sie also nur die interne Arbeitsweise verändert, brauchst du nur eine set, aber keine get Methode. Andersrum natürlich genauso.

Viele Grüße,
Guillermo
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Moderator
 
Beiträge: 1093
Registriert: 01.10.2007, 18:18
Wohnort: Bayern

Re: PHP und OOP, ein ein paar Probleme

Beitragvon Andreas W. am 07.02.2012, 02:26

Guten Abend/Morgen!

Vielleicht hilft es dir, wenn du dir ein paar Tutorials zu verschiedenen Themen ansiehst in denen objektorientiert gearbeitet wird. Ich kann dir hier die Tutorial-Reihe PHP & OOP unter Tutorials > PHP > Anwendungen empfehlen.

Außerdem solltest du deine Struktur nochmal überdenken. Das wichtigste ist, dass du deinen Content vom Layout der Seite trennen kannst. Eine TemplateEngine kann in Zusammenarbeit mit einem FrontController dabei helfen. Auch zu diesem Thema findest du ein Tutorial im Bereich Anwendungen.

Noch ein paar Anmerkungen zur Objektorientierung. Die Objektorientierung ermöglicht es dem Entwickler abstrakte Abbildungen der Realität in Form von Klassen zu erstellen. Instanzen solcher Klassen nennt man Objekte. Ein gutes Beispiel für eine Klasse ist ein Mitarbeiter einer Universität. Jeder Mitarbeiter besitzt eine Personalnummer, einen Namen und eine E-Mail-Adresse. Diese Merkmale nennt man Attribute einer Klasse. Funktionen, die auf diesen Attributen operieren nennt man Methoden.

Code: Alles auswählen

<?php

class Employee 
{
   private 
$persNo
   private $name
   private $email
;

   public function setName($name) {
      $this->name = $name;
   }

   public function getName() {
      return $this->name;
   }

   ...
}

?>


Eine Instanz der Klasse Employee wäre zum Beispiel Herr Professor Gerd Kurt, eine andere Dr. Dietmar Wille.

Möchte man nun in unterschiedliche Angestellte unterscheiden wird es etwas schwierig, denn verfahren wir wie oben, müssen wir für jeden Angestellten-Typ, zum Beispiel Professoren, Doktoranten und Studentische Hilfskräfte, eine neue Klasse mit Namen etc. definieren. An dieser Stelle Hilft uns Vererbung. Sie nimmt uns zwar nicht die Implementierung dieser Klassen ab, aber sie erleichtert sie uns. Attribute und Methoden der Eltern-Klasse (Stichwort extends), die mit public oder protected gekennzeichnet sind, sind auch in der Kind-Klasse verfügbar. Die Attribute für den Namen, die E-Mail-Adresse, sowie die Personal-Nummer und die dazugehörigen Getter und Setter Methoden müssen nicht mehr implementiert werdem.



Code: Alles auswählen

<?php

class Employee {
   protected 
$persNo;
   protected 
$name;
   protected 
$email;

   public function 
setName($name) {
      
$this->name $name;
   }

   public function 
getName() {
      return 
$this->name;
   }

   ...
}


class 
Professor extends Employee {
   protected 
$courses;

   public function 
setCourses($courses) {
      
$this->courses$courses;
   }

   public function 
getCourses() {
      return 
$this->courses;
   }
}

class 
Phd extends Employee {
   private 
parent;

   public function 
setParent($parent) {
      
$this->parent$parent;
   }

   public function 
getParent() {
      return 
$this->parent;
   }
}

?>


Im obigen Beispiel sehen wir, dass es dank der Vererbung relativ leicht ist schnell und einfach Kind-Klassen aufzubauen.

Objektorientierung kann aber auch Struktur gebend sein. Interfaces definieren zum Beispiel Schnittstellen, auf die von Klassen, die diese einbinden, implementiert werden müssen. Im Tutorial PHP & OOP - Formulargenerierung und Verarbeitung werden zum Beispiel abstrakte Klassen verwendet um die Schnittstellen zu Filtern und Validatoren zu definieren. Abstrakte Klassen sind praktisch Interfaces, die allerdings bereits einige Methoden und Attribute implementieren bzw. definieren.

Wo macht Objektorientierung Sinn? Objektorientierung macht vorallem Sinn, wenn mehrere Instanzen ein und des selben Objekts benötigt werden, zum Beispiel bei der Arbeit mit Benutzern oder Produkten eines Webshops. Objektorientierung macht außerdem Sinn, wenn ein gewisser Grad an Abstraktion nötig ist. Es ist beispielsweise auf verschiedene Arten möglich Konfigurationen zu speichern. Doch obwohl die Daten in einer Datei, einer MySql oder SqLite-Datenbank gespeichert werden können, sollte der Zugriff, die Schnittstelle immer gleich aussehen, um das entsprechende Modul einfach austauschen zu können.

Ich hoffe ich konnte die Grundlagen etwas beleuchten. Bei Fragen bitte einfach nochmal nachhaken. :-D

Liebe Grüße

Andreas
Association for Valid wEb DevelOpment - Informatik, Programmierung & Webdesign
http://www.avedo.net
Benutzeravatar
Andreas W.
Web Moderator
 
Beiträge: 1352
Registriert: 09.12.2007, 20:12
Wohnort: Göttingen


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast