php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.02.2009, 17:04  
Benutzer
 
Benutzerbild von echo
 
Registriert seit: 20.09.2008
Beiträge: 91
PHP-Kenntnisse:
Anfänger
echo ist zur Zeit noch ein unbeschriebenes Blatt
Standard Einstieg in Objekt-orientierte-Programmierung (OOP) - Erste Versuche :-)

Hallo,

nachdem ich an anderer Stelle hier im Forum den Einstieg in OOP gewagt habe, ist hier nun mein erster Versuch.

Ich wollte mit einer Mini-CMS üben.
Es gibt eine MySQL Tabelle namens content die folgende Spalten hat:
cms_id (ID für jede einzelne Unterseite)
cms_link (Link zur jeweiligen Unterseite)
cms_title (Titel der Unterseite)
cms_menu (Wie die Unterseite in der Navi erscheinen soll)
cms_require (hier wird der der Dateiname abgelegt, in welcher sich der Content für die jeweilige Unterseite befindet)

Dann hab ich mir zwei Klassen gebastelt: Die erste holt die Daten aus der Tabelle, die zweite gibt die Daten aus:
PHP-Code:
#Holt die gewünschten Daten aus der Datenbank und packt sie in ein array
class cms_daten {
  private 
$spalten;
  private 
$tabelle;
  
  public function 
set_spalten ($x) {
  
$this->spalten $x;
  }
  
  public function 
set_tabelle ($x) {
  
$this->tabelle $x;
  }

  public function 
db_abfrage() {
  
$abfrage "SELECT $this->spalten FROM $this->tabelle";
  
$ergebnis mysql_query($abfrage);
  
  
$output = array();
  while (
$row mysql_fetch_assoc ($ergebnis)){
    
$output[] = $row;                    
    }
  if (
count ($output) > 0){
    return 
$output;
  }
  else{
    return 
false;                    
  }
  }
}

#Macht aus jeden Menüpunkt einen Listenpunkt mit Link
class cms_navi extends cms_daten {
private 
$menu;  
  public function 
__construct(){
  
cms_daten::set_spalten('*');
  
cms_daten::set_tabelle('content');
  
$navi_data cms_daten::db_abfrage();
  foreach (
$navi_data AS $wert) {
      
$this->menu.= "<li><a href=".$wert["cms_link"].">".$wert["cms_menu"]."</a></li>\n";
    }
  }
  
  public function 
display_menu() {
  return 
$this->menu;
  }

Wenn ich dann
PHP-Code:
$my_navi = new cms_navi;
echo 
$my_navi->display_menu(); 
mache, klappt auch alles wunderbar!

Als nächste Schritte kämen dann Klassen für "current page" (Aktuelle Seite soll im Menü anders angezeigt werden) und natürlich eine Klasse, die den Content anzeigt.

ABER bevor ich weitermache, wollte ich gerne erst mal die Meinung von den Profis hier über meine Klassen wissen. Und ganz ehrlich: Ich hab selbst bei meiner eigenen Klasse immer noch nicht kapiert, was der Vorteil von OOP ist, denn das alles hätte ich doch auch mit stinknormalen prozeduralen Funktionen hingekriegt, oder?

Vielen Dank für Eure Tipps!
echo ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.02.2009, 18:36  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo,

die Vorgehensweise ist schon nicht verkehrt. Möchte man das Design erweitern wird es sehr schnell komplex. Was du grundsätzlichen machen kannst ist eine Filter-Klasse einführen, die die notwendigen Request-Parameter aus der URL liest (aktuelle Seite, Sprache, ...) und in eine Model-Klasse schreibst. Diese Informationen kann dann deine Ausgabe-Klasse nutzen um sich die Daten aus der Tabelle lesen zu lassen und sie anschließend auszugeben.

Das geht dann schon mal in die Richtung 3-Schicht-Architektur und MVC. Sobald du das geschafft hast, kannst du dir über Bootstrapping gedanken machen, sprich die komplette Seite über eine PHP-Datei ausliefern. Ab dann hast du die Möglichkeit zentrale Funktionen auch zentral vorzuhalten.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 14.02.2009, 22:54  
Benutzer
 
Benutzerbild von echo
 
Registriert seit: 20.09.2008
Beiträge: 91
PHP-Kenntnisse:
Anfänger
echo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
die Vorgehensweise ist schon nicht verkehrt.
Das ist doch mal ermutigend. Muss nämlich sagen, seit HTML ==> CSS ==> PHP hatte ich noch nie so Probleme, was zu kapieren, wie OOP!

Kann ich anstatt
PHP-Code:
class blub extends bla {
...
bla::set_blabla()
...

eigentlich nicht auch
PHP-Code:
class blub{
...
private 
blabla = new bla
...

machen? Das wäre doch auch eine Vererbung, oder?
echo ist offline  
Alt 14.02.2009, 23:01  
Neuer Benutzer
 
Registriert seit: 05.02.2009
Beiträge: 21
BumpyJohnson befindet sich auf einem aufstrebenden Ast
Standard

Yo geht aber es ist kein Vererbung. Du generierst einfach ein Objekt von einer Klasse!

http://de.wikipedia.org/wiki/Objekto...rung#Vererbung
BumpyJohnson ist offline  
Alt 14.02.2009, 23:05  
Benutzer
 
Benutzerbild von echo
 
Registriert seit: 20.09.2008
Beiträge: 91
PHP-Kenntnisse:
Anfänger
echo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Stimmt, das wäre natürlich keine richtige Vererbung. Was ist denn best practise? extends oder new? Soweit ich das verstehe, nehmen sich beide nicht viel, oder?
echo ist offline  
Alt 14.02.2009, 23:15  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Ein kluger Kopf hat mir mal beigebracht: "Die Komposition ist der Vererbung stets vorzuziehen." Grund: die Wiederverwendbarkeit der komponierten Komponente.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 14.02.2009, 23:15  
Neuer Benutzer
 
Registriert seit: 05.02.2009
Beiträge: 21
BumpyJohnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von lisa81 Beitrag anzeigen
Stimmt, das wäre natürlich keine richtige Vererbung. Was ist denn best practise? extends oder new? Soweit ich das verstehe, nehmen sich beide nicht viel, oder?
Naja, Vererbenung ist schon was anderes als ein neues Objekt zu erstellen. Eine Unterklasse bekommt (erbt) die Eigenschaften und Methoden seiner Oberklasse. z.b. Wenn Auto eine Oberklasse ist dann hast du vielleicht unterklassen wie z.b. Combi, Limosine oder Cabrio. In Auto sind halt die "grundlegenden" Methoden wie bremsen und anfahren drin. Bei Cabrio gibt es dann noch eine Methode die DachAuf heißt. Der Vorteil liegt jetzt darin, dass du die grundlegenden Methoden nicht mehr implementieren musst. ...so on!
Aber google hätte dir vielleicht eine noch bessere Antwort gegeben.
BumpyJohnson ist offline  
Alt 15.02.2009, 22:00  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Das Problem am Auto-Beispiel ist, dass Autos zwar im richtigen Leben einfach erscheinen, weil man sich nicht mit der Konstruktion, sondern nur mit der API beschäftigen muss, für den Einstieg in OOD sind sie jedoch Gift, weil zu Komplex. Ich würde einfacher beginnen, mit einem Gästebuch z.B.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 15.02.2009, 23:36  
Erfahrener Benutzer
 
Benutzerbild von Hu5eL
 
Registriert seit: 26.02.2008
Beiträge: 342
Hu5eL befindet sich auf einem aufstrebenden Ast
Hu5eL eine Nachricht über ICQ schicken
Standard

darf ich dir nen tipp geben?
speichere die sachen nicht in einem array wenn du große seiten bekommst, mit vielen usern und größeren abfragen geht der vorteil von datenbanken verloren. du speicherst z.b 100 ergebnisse in einem array und das bei 1000 usern, nimmt viel arbeitsspeicher in anspruch. Vortiel ist ja eigentlich, das man 100000 ergebnisse haben kann aber sie nicht alle in eine variable stecken muss.
mach sowas wie gibNaechsteReihe...
BTW: ist das was wir in der schule lernen... wenn es bullshit ist hier bitte sagen
__________________
Under Construktion
Hu5eL ist offline  
Alt 17.02.2009, 01:36  
Benutzer
 
Benutzerbild von echo
 
Registriert seit: 20.09.2008
Beiträge: 91
PHP-Kenntnisse:
Anfänger
echo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für Eure Tipps!

Was Vererbung betrifft, so habe ich versucht mir das mit einem Bsp. zu erklären, dass den meisten geläufig ist: CSS. Wenn ich z.B.

a {color: red;}

deklariere, so kann ich dies später erweitern, z.B.:

div#blabla a {background-color: blue;}

So ähnlich (aber komplexer) funzt OOP. Ich hoffe, so habe ich zumindest das Prinzip Vererbung bei OOP jetzt geschnallt...
echo ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Einstieg in Objekt-orientierte-Programmierung (OOP) echo PHP Tipps 2009 50 17.02.2009 11:55
[Erledigt] PHP5 OOP Zugriff aus einem Objekt auf ein externes Objekt PHP Tipps 2006 5 28.01.2006 16:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
einstieg objektorientierte programmierung, objektorientierte programmierung einstieg, php oop extends, php gästebuch objektorientiert, http://www.php.de/php-einsteiger/51845-einstieg-objekt-orientierte-programmierung-oop-erste-versuche.html, einstieg in die objektorientierte programmierung, gästebuch oop, php object orientiert, komposition oop, php oop extend, php oop guestbook, php oop gästebuch, orientierte programmierung, php gästebuch oop, oop php extends, gästebuch objektorientiert, oop gästebuch php, oop komposition, objekt orientiert php, php objektorientiertes gästebuch

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum