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 02-07-2009, 14:02
PuP
 Registrierter Benutzer
Links : Onlinestatus : PuP ist offline
Registriert seit: Jul 2009
Beiträge: 9
PuP befindet sich auf einem aufstrebenden Ast
Standard OOP Laie Brauche mal ein Anstoss

Also vorab muß ich sagen, ich habe von OOP sogut wie keine Ahnung ich kann Funktionen erstellen und unstrukturierten Code massig erzeugen. Bekomme SQL Verbindungen hin und beschäftige mich unregelmäßig seit 4-5 Jahren mit PHP. Es kann auch sein das die Frage jetzt eher in ein anderes Forum passt.

Also ich habe für mich mal ein kleinen Shop gebastelt gehabt. Jetzt stellt sich mir die Frage wie könnte ich die Produktauflistung in OOP umsetzen.

Jetzt ist es so, es gibt eine Datei mit einer Funktion wo die DB ausgelesen wird die Daten in einer Schleife durchgegangen und in ein Array gespeichert wird und am Ende werden diese ausgegeben. Dazu habe ich dann noch eine Datei mit ähnlicher Funktion für die Suche, für die Auflistung nach Hersteller und fürs Archiv. Das macht zusammen 4 Funktionen in vier Dateien. Und bevor ich es noch vergesse, es gibt noch eine fünfte für die Detailanzeige, ist jetzt aber nicht wichtig.

Nun sind die Bedingungen für alle vier Funktionen unterschiedlich. Dennoch ist der Output bei allen fast ähnlich. Bei dreien gibt es eine dazu noch eine Blätterfunktion.

Hier mal ein Versuch von mir:

PHP-Code:
<?php
 
class products {
     
     private function 
hersteller(){
         
$sql_teil 'FROM...WHERE';
         return 
sql_query('SELECT...');
     }
     
     private function 
normal_listing(){
         
$sql_teil 'FROM...WHERE';
         return 
sql_query();
     }
     
     private function 
suche(){
         
$sql_teil 'FROM...WHERE';
         return 
sql_query();
     }
     
     private function 
archiv(){
         
$sql_teil 'FROM...WHERE';
         return 
sql_query();
     }
     
     private function 
blaettern(){
         
         return 
sql_query('SELECT COUNT...');
     }
     
     public function 
get_blaettern($was$blaettern$suche){
         
$this->blaettern();
         return array(
'vor''zurueck''nummern etc');
     }
     public function 
get_output($was$blaettern$suche){
         
         switch(
$was){
             case 
'hersteller':
                 
$data $this->hersteller($blaettern);            
                 break;
             case 
'normal':
                 
$data =    $this->normal_listing($blaettern);    
                 break;
             case 
'suche':
                 
$data =    $this->suche($suche$blaettern);
                 break;
             case 
'archiv':
                 
$data =    $this->archiv($blaettern);
                 break;
         }
         
         while(
$r sql_result($data)){
             
$output[] = array('blabla');
         }
         return 
$output;
     }
     
 }
 
 
$items = new products();
 
$ausgabe $items->get_output($was,$blaettern$suche);
$blaetter_data $items->get_blaettern($was,$blaettern,$suche);
?>

Ist das noch OOP oder ist es schon zu viel Codemischung? Dann das soweit von der Struktur noch OK ist, hätte ich gerne noch ein Tipp wie ich in der Blätter Funktion an den jeweils passenden SQL Code aus den anderen Funktionen komme. Möchte wenn, diesen ja nicht nochmal in der Blätter Funktion schreiben. Vielleicht sollte man die Blätterfunktion von der product Klasse ableiten, Art Mutter - Kind.
Mit Zitat antworten
  #2 (permalink)  
Alt 02-07-2009, 14:10
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Das sieht wirklich nicht sehr OOPlig aus...
Mehr wie, in eine Klasse, gestopfter Prozeduraler Code.


Das Switch-Case ist da nicht schön anzusehen. Meist ist es Aufgabe des Controllers, zu wissen, wie welche Daten vom Modell zu bekommen sind.
__________________
Wir werden alle sterben

Geändert von combie (02-07-2009 um 14:19 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 02-07-2009, 14:38
PuP
 Registrierter Benutzer
Links : Onlinestatus : PuP ist offline
Registriert seit: Jul 2009
Beiträge: 9
PuP befindet sich auf einem aufstrebenden Ast
Standard

mhh dachte mir sowas schon, denke offensichtlich noch zu sehr in meinen alten Mustern.
Mit Zitat antworten
  #4 (permalink)  
Alt 05-07-2009, 15:24
PuP
 Registrierter Benutzer
Links : Onlinestatus : PuP ist offline
Registriert seit: Jul 2009
Beiträge: 9
PuP befindet sich auf einem aufstrebenden Ast
Standard

Neuer Versuch:

PHP-Code:
<?php
class products_data {

    public static function 
listing($sql){
        
$sql sql_query($sql);
        while(
$r sql_fetch($sql)){
            
$arr[] = array('id'=>$r['id'],
                            
'name'=>$r['name'],
                            
'img'=>$this->picture($r['picture']),
                            
'etc'=>etc);
        }
        return 
$arr;
    }

    public static function 
detail($sql){
        
$sql sql_query($sql);
        return 
$sql_fetch($sql);
    }

    public static function 
listing_count($sql){
        
$sql sql_query($sql);
        return 
$sql_fetch($sql);
    }

    private function 
picture($pic){
        
$picture '';
        if(
file_exists($pfad.etc.$pic)){
            
//....weiter code
            
$picture 'blabla';
        }
        return 
$picture;
    }

}

class 
products_controller{

    public function 
get_output($was$suche$seiten_anzahl){
        
$data_build = new products_build();
        switch(
$was){
            case 
'hersteller':
                
$sql  'SELECT...';
                
$data1 products_data::listing($sql);
                
$data2 '';//keine Blätterfunktion
                
break;
            case 
'archiv':
                
$sql  'SELECT...';
                
$sql1 'SELECT COUNT...';
                
$data1 products_data::listing($sql);
                
$data2 products_data::listing_count($sql1);
                break;
            case 
'suche':
                
$sql  'SELECT...';
                
$sql1 'SELECT COUNT...';
                
$data1 products_data::listing($sql);
                
$data2 products_data::listing_count($sql1);
                break;
            case 
'archiv':
                
$sql  'SELECT...';
                
$sql1 'SELECT COUNT...';
                
$data1 products_data::listing($sql);
                
$data2 products_data::listing_count($sql1);
                break;
            case 
'detail':
                
$sql  'SELECT...';
                
$data1 products_data::detail($sql);
                
$data2 '';//keine Blätterfunktion
                
break;
            case 
'normal':
            default:
                
$sql  'SELECT...';
                
$sql1 'SELECT COUNT...';
                
$data1 products_data::listing($sql);
                
$data2 products_data::listing_count($sql1);
        }
        return array(
$data1$data2);
    }
}

$items = new products_controller();

$daten $items->get_output($was$suche$seiten_anzahl);

?>

Oder läuft OOP generell auf ein MVC hinaus wie hier: MVC mit PHP - Das MVC-PAttern mit PHP implementieren und verwenden
Mit Zitat antworten
  #5 (permalink)  
Alt 05-07-2009, 15:38
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Oder läuft OOP generell auf ein MVC hinaus
Nicht unbedingt, aber meist ja...

Übrigens, auf das static solltest du möglichst verzichten.
Auch das Switch-Case Konstrukt solltest du entsorgen. (aber das sagte ich ja schon mal)

Tipp:
Schau dir mal das Google: "Doctrine ORM" an. Das bietet eine sehr angenehme DB Schnittstelle.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #6 (permalink)  
Alt 05-07-2009, 15:47
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Das ist nicht OOP. Du hast lediglich Funktionen in Klassen gebündelt und so eine Art Namespacing erzeugt. Wenn das dein Ziel ist, dann mach get_output() auch noch static und es ist perfekt.
Mit Zitat antworten
  #7 (permalink)  
Alt 05-07-2009, 21:56
PuP
 Registrierter Benutzer
Links : Onlinestatus : PuP ist offline
Registriert seit: Jul 2009
Beiträge: 9
PuP befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von combie Beitrag anzeigen
Auch das Switch-Case Konstrukt solltest du entsorgen. (aber das sagte ich ja schon mal)
Mhh und wie zum Beispiel unterscheide ich am einfachsten welche Art (archiv, suche etc) gerade gefragt ist. Hatte mir ja über Google ein paar Beispiele angesehen gehabt und manche nutzen auch switch case Konstrukte in ihren sogenannten "controllern", daher hatte ich das zwar ausgelagert in eine eigene Klasse aber dennoch erstmal erhalten.

Oder soll ich das außerhalb der Klassen machen und dann die passende Klasse/Methode aufrufen?

So ala:

PHP-Code:
$data = new products();
$data->product_listing($sql_fuer_archiv); 
Das mit dem doctrine orm muß ich mir mal anschauen.


Zitat:
Das ist nicht OOP. Du hast lediglich Funktionen in Klassen gebündelt und so eine Art Namespacing erzeugt. Wenn das dein Ziel ist, dann mach get_output() auch noch static und es ist perfekt.
PHP-Code:
//sql_query() ist hier nur ein Platzhalter für PDO
class products_data {

    public function 
listing($sql){
        
$sql sql_query($sql);
        while(
$r sql_fetch($sql)){
            
$arr[] = $r;
        }
        return 
$arr;
    }

    public function 
detail($sql){
        
$sql sql_query($sql);
        return 
$sql_fetch($sql);
    }


Inwieweit müsste ich denn die Klasse für die Datenholung abändern, das die dem OOP nahekommt.
Mit Zitat antworten
  #8 (permalink)  
Alt 05-07-2009, 22:50
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von PuP Beitrag anzeigen
Inwieweit müsste ich denn die Klasse für die Datenholung abändern, das die dem OOP nahekommt.
Versuchs mal mit interface, abstract, extends, implements, __construct(), final, ...
Mit Zitat antworten
  #9 (permalink)  
Alt 05-07-2009, 22:56
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

final ist u.U. etwas übertrieben!
Aber die Richtung stimmt...
__________________
Wir werden alle sterben
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
oop anfänger class


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Brauche HILFE!!!!! higci PHP Developer Forum 4 10-09-2007 14:14
ich brauche mal hilfeeeeeee partyesel Apps und PHP Script Gesuche 3 19-11-2005 15:52
Brauche Hilfe... thkolz HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 10 17-11-2005 16:58
Brauche hilfe fee Projekthilfe 17 04-11-2005 22:10
Laie braucht Hilfe big.zelli Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) 19 07-04-2004 09:45

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 20:02 Uhr.