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 03-11-2008, 13:20
carapau
 Registrierter Benutzer
Links : Onlinestatus : carapau ist offline
Registriert seit: Aug 2005
Ort: Bielefeld
Beiträge: 347
carapau ist zur Zeit noch ein unbeschriebenes Blatt
Standard Was haltet ihr von meinem Programmierstil?

Hallo Community!

Mir fällt auf, dass ich viele Objekte (für jeden Block) erzeuge und frage mich, ob sich das auf die Performance auswirkt. Andererseits finde ich es so genau richtig, da die Blöcke unabhängig voneinander arbeiten sollen und nicht im Vorfeld klar ist welche Objekte benötigt werden (könnte ich ja sonst oberhalb des Switch einmal erzeugen).

Was haltet ihr davon SQL-Code als Parameter zu übergeben?

Hier ein einfacher/abgespeckter Auszug meines Codes:
PHP-Code:
// Datei: admin/news/index.php
switch ($_GET['action']) {
    default:
        
$User = new User;
        
$userId $User->getUserId();
                    
        if (
$userId) {
            
$News = new News();
            
// Die News werden gefiltert durch direkte Eingabe von SQL, dirty? 
            
$entries $News->getEntries("WHERE userId = $userId ORDER BY newstitle");
            if (! empty(
$entries)) {
                
$Smarty = new Smarty;
                
$Smarty->assign("entries"$entries);
                
$Smarty->display("news/index.tpl");
            }
        }
        break;

    case 
'addform':
        
$User = new User;
        
$userId $User->getUserId();
        
        
// Hier muss der User überprüft werden (#2)
        
if ($userId) {
            
$Smarty = new Smarty;
            
$Smarty->display("news/addform.tpl");
        }
        break;

    case 
'test':
        
// Hier wird nichts überprüft            
        
$Smarty = new Smarty;
        
$Smarty->display("test.tpl");
        break;

Gruß
carapau
__________________
Lasst euch nicht lumpen, hoch den Humpen!
Mit Zitat antworten
  #2 (permalink)  
Alt 03-11-2008, 14:17
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 Re: Was haltet ihr von meinem Programmierstil?

Zitat:
Original geschrieben von carapau
frage mich, ob sich das auf die Performance auswirkt
Das kommt auf die Objekte an, bzw. wie teuer deren Konstruktion ist.

Zum Switch: Die Cases werden von oben nach unten geprüft und der default-Case ist sozusagen ein Fallback, der nur zum Zuge kommt, wenn kein anderer Case zutraf. Deswegen steht er eigentlich immer am Ende. Liest sich irgendwie logischer.
Was passiert eigentlich, wenn if($userid) fehlschlägt? Gibst du dann gar nichts aus?
Ich würde die Objekte übrigens vor dem Switch erzeugen. Der einzige Fall, wo du sie nacher nicht brauchst, ist ein Testfall. Der wird im Live-Betrieb wahrscheinlich nie ausgeführt.

Zitat:
Was haltet ihr davon SQL-Code als Parameter zu übergeben?
Passt schon. Es wäre zwar eleganter, diese Klausel in ein Object zu kapseln, aber wenn es dir primär um Performance geht und das SQL auch noch (quasi) statisch ist, kann man das durchaus so lassen.

Geändert von onemorenerd (03-11-2008 um 14:57 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 03-11-2008, 14:24
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

Normalerweise erstellst du dir deine applikationsweiten Objekte an einer anderen Stelle, so zum Beispiel dein Smarty-Objekt. Und innerhalb deines Konstrukts verwendest du die Instanz lediglich.
Mit Zitat antworten
  #4 (permalink)  
Alt 03-11-2008, 16:26
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

smarty sollte aber z.B. in jedem Block verwendet werden, dann macht es keinen Sinn 3 Mal $smarty = new Smarty() zu schreiben... einmal drüber und gut, Unabhängigkeit hin oder her man kann es auch übertreiben...
Mit Zitat antworten
  #5 (permalink)  
Alt 03-11-2008, 17:16
carapau
 Registrierter Benutzer
Links : Onlinestatus : carapau ist offline
Registriert seit: Aug 2005
Ort: Bielefeld
Beiträge: 347
carapau ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Re: Was haltet ihr von meinem Programmierstil?

Zitat:
Original geschrieben von onemorenerd
Das kommt auf die Objekte an, bzw. wie teuer deren Konstruktion ist.

Zum Switch: Die Cases werden von oben nach unten geprüft und der default-Case ist sozusagen ein Fallback, der nur zum Zuge kommt, wenn kein anderer Case zutraf. Deswegen steht er eigentlich immer am Ende. Liest sich irgendwie logischer.
Was passiert eigentlich, wenn if($userid) fehlschlägt? Gibst du dann gar nichts aus?
Ich würde die Objekte übrigens vor dem Switch erzeugen. Der einzige Fall, wo du sie nacher nicht brauchst, ist ein Testfall. Der wird im Live-Betrieb wahrscheinlich nie ausgeführt.

Passt schon. Es wäre zwar eleganter, diese Klausel in ein Object zu kapseln, aber wenn es dir primär um Performance geht und das SQL auch noch (quasi) statisch ist, kann man das durchaus so lassen.
Der Code ist abgespeckt, normal sind da ca. 10 Cases - weit aus komplexer!

Den "default" als letztes setzen macht eigentlich Sinn. Wenn kein Parameter gesetzt wurde, wird der Default und somit die Übersicht aufgerufen. Die Übersicht erscheint prozentual viel häufiger, als die anderen Cases.

Ich möchte die Klassen so schlank wie möglich halten, also sowas vermeiden:
- getNewsByDate()
- getNewsByTitle()
- getNewsByAuthor($userId)

Obwohl, das ist eigentlich der normale Weg, oder?

Zitat:
Original geschrieben von onemorenerd
Normalerweise erstellst du dir deine applikationsweiten Objekte an einer anderen Stelle, so zum Beispiel dein Smarty-Objekt. Und innerhalb deines Konstrukts verwendest du die Instanz lediglich.
Jap, deshalb zweifel ich halt. Andererseits würden unbenötigte/überflüssige Objekte erzeugt werden.
__________________
Lasst euch nicht lumpen, hoch den Humpen!
Mit Zitat antworten
  #6 (permalink)  
Alt 03-11-2008, 17:17
carapau
 Registrierter Benutzer
Links : Onlinestatus : carapau ist offline
Registriert seit: Aug 2005
Ort: Bielefeld
Beiträge: 347
carapau ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von ghostgambler
smarty sollte aber z.B. in jedem Block verwendet werden, dann macht es keinen Sinn 3 Mal $smarty = new Smarty() zu schreiben... einmal drüber und gut, Unabhängigkeit hin oder her man kann es auch übertreiben...
Da stimm ich dir zu! Objekte, die in JEDEM Block verwendet werden, können vor dem Switch erzeugt werden!
__________________
Lasst euch nicht lumpen, hoch den Humpen!
Mit Zitat antworten
  #7 (permalink)  
Alt 03-11-2008, 17:23
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

Zitat:
Da stimm ich dir zu! Objekte, die in JEDEM Block verwendet werden, können vor dem Switch erzeugt werden!
Ich sag ja nix anderes
Mit Zitat antworten
  #8 (permalink)  
Alt 03-11-2008, 17:28
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Re: Re: Was haltet ihr von meinem Programmierstil?

Zitat:
Original geschrieben von carapau

Ich möchte die Klassen so schlank wie möglich halten, also sowas vermeiden:
- getNewsByDate()
- getNewsByTitle()
- getNewsByAuthor($userId)

Obwohl, das ist eigentlich der normale Weg, oder?
Es gibt in dem Sinne keinen "normalen Weg". Du möchtest deine Klassen simpel halten? Dann implementiere auch nur genau das, was du benötigst und du kannst dieses "Problem" abhaken
Das bedeutet konkret: Benötigst du kein getNewsByDate, dann implementiere es nicht. Benötigst du kein getNewsByTitle, dann implementiere auch das nicht, und so weiter und so fort.

Und wo wir gerade beim Programmierstil sind: Wieso verwendest du ohne Grund ein Mix aus Anführungszeichen und Hochkommas bei Strings? Bleib bei den Hochkommas, wenn du die Interpolation der Anführungszeichen nicht benötigst.

Grüße

Geändert von Griecherus (03-11-2008 um 17:30 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 03-11-2008, 17:34
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 Re: Re: Re: Was haltet ihr von meinem Programmierstil?

Zitat:
Original geschrieben von carapau
Der Code ist abgespeckt, normal sind da ca. 10 Cases - weit aus komplexer!
...
Ich möchte die Klassen so schlank wie möglich halten, also sowas vermeiden:
- getNewsByDate()
- getNewsByTitle()
- getNewsByAuthor($userId)
Hm, das riecht nach Adapter und Delegation.
Mit Zitat antworten
  #10 (permalink)  
Alt 03-11-2008, 18:09
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.589
h3ll befindet sich auf einem aufstrebenden Ast
Standard Re: Re: Re: Was haltet ihr von meinem Programmierstil?

Zitat:
Original geschrieben von carapau
Ich möchte die Klassen so schlank wie möglich halten, also sowas vermeiden:
- getNewsByDate()
- getNewsByTitle()
- getNewsByAuthor($userId)

Obwohl, das ist eigentlich der normale Weg, oder?
Bei einem MVC erledigt das alles das Base Model. Man braucht dafür keine einzige Programmzeile schreiben. Nur mal als Beispiel.
Mit Zitat antworten
  #11 (permalink)  
Alt 03-11-2008, 20:16
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

Zitat:
- getNewsByDate()
- getNewsByTitle()
- getNewsByAuthor($userId)
Klingt nach Active Record.
Mit Zitat antworten
  #12 (permalink)  
Alt 03-11-2008, 21:37
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Kenn ich als http://en.wikipedia.org/wiki/Data_Access_Object

Mit Filter und Listen-Factory genau das was da als Active Record beschrieben wird
Mit Zitat antworten
  #13 (permalink)  
Alt 03-11-2008, 22:17
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

Zitat:
Kenn ich als Data_Access_Object
Jep, gibt es mehrere sehr ähnliche Ansätze. Reicht im Grunde von Zend_Db_Table bis Doctrine.
Mit Zitat antworten
  #14 (permalink)  
Alt 04-11-2008, 10:54
carapau
 Registrierter Benutzer
Links : Onlinestatus : carapau ist offline
Registriert seit: Aug 2005
Ort: Bielefeld
Beiträge: 347
carapau ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Re: Re: Re: Was haltet ihr von meinem Programmierstil?

Zitat:
Original geschrieben von Griecherus
Und wo wir gerade beim Programmierstil sind: Wieso verwendest du ohne Grund ein Mix aus Anführungszeichen und Hochkommas bei Strings? Bleib bei den Hochkommas, wenn du die Interpolation der Anführungszeichen nicht benötigst.

Grüße
Hast Recht, werde drauf achten!

Zitat:
Original geschrieben von h3ll
Bei einem MVC erledigt das alles das Base Model. Man braucht dafür keine einzige Programmzeile schreiben. Nur mal als Beispiel.
Wie meinst du das? Hast ein Beispiel?

---

Mist, ich dachte, ich würde im Sinne von MVC coden.

Hab den Code so getrennt:
- /classes/News.class.php (liefert die Datensätze aus der DB)
- /news/index.php (steuert - siehe Code-Beispiel am Anfang!)
- /templates/news/index.tpl (dumme HTML-Templates)

Ist das nicht MVC?

Grüße
__________________
Lasst euch nicht lumpen, hoch den Humpen!
Mit Zitat antworten
  #15 (permalink)  
Alt 04-11-2008, 11:09
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.589
h3ll befindet sich auf einem aufstrebenden Ast
Standard Re: Re: Re: Re: Re: Was haltet ihr von meinem Programmierstil?

Zitat:
Original geschrieben von carapau
Wie meinst du das? Hast ein Beispiel?
PHP-Code:
$person = new person();
$persons person->find_by_citiy('Vienna');

foreach (
$persons as $person) {
    
printf('<div>%s %s</div>'$person->firstname$person->lastname);

In der person Klasse werden nur der Tabellenname und die Relationen eingetragen. Der Rest geht vollkommen automatisch.

Gibt aber auch Unterschiede von MVC Framework zu MVC Framework.

Zitat:
Mist, ich dachte, ich würde im Sinne von MVC coden.

Hab den Code so getrennt:
- /classes/News.class.php (liefert die Datensätze aus der DB)
- /news/index.php (steuert - siehe Code-Beispiel am Anfang!)
- /templates/news/index.tpl (dumme HTML-Templates)

Ist das nicht MVC?
Nein, MVC heißt Model - View - Controller.

Geändert von h3ll (04-11-2008 um 11:13 Uhr)
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

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
ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:41 Uhr.