Mehrere Variablen auf einmal setzen (OOP)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mehrere Variablen auf einmal setzen (OOP)

    Hey zusammen

    Ich programmiere schon länger in PHP, bin jedoch erst vor kurzem auf eure nette Community gestossen! Ich hoffe ich werde hier eine schöne Zeit haben... Doch nun zum Thema:

    Ich habe zum Beispiel eine eigene Datenbankklasse, wo der Konstruktor so aussieht:

    PHP-Code:
    function __construct($dbHost$dbUser$dbPass$dbData) {
        
    // Set variables
        
    $this->dbHost $dbHost;
        
    $this->dbUser $dbUser;
        
    $this->dbPass $dbPass;
        
    $this->dbData $dbData;
        
        
    // ...

    Teilweise habe ich aber Funktionen, welche noch viel mehr Variablen setzen. Das blöde ist: Die Funktion hat viele Parameter, und JEDE Klassenvariable muss ich einzeln setzen. Kann man das irgendwie optimieren? Falls ihr es nicht verstanden haben solltest, das ist mühsam:

    PHP-Code:
    $this->var1 var1;
    $this->var2 var2;
    $this->var3 var3;
    ... 
    Eine zweite Frage, welche ich hier noch gleich kurz anhänge: Mit welcher "escaping"-Funktion bin ich 100% auf der sicheren Seite. (MySQL) - Habe zwar schon einiges gecodet, aber leider bisher noch nie sehr auf hackersicher geachtet.

    Ich danke für eure Antworten und wünsche allen einen schönen Abend

    Gruss
    TheC0der

  • #2
    Zitat von TheC0der Beitrag anzeigen
    Teilweise habe ich aber Funktionen, welche noch viel mehr Variablen setzen. Das blöde ist: Die Funktion hat viele Parameter, und JEDE Klassenvariable muss ich einzeln setzen. Kann man das irgendwie optimieren?
    Als erstes solltest du überlegen, ob ein Objekt wirklich so viele separate, unabhängige Attribute braucht.
    Vielleicht kannst du ja welche davon in Arrays gruppieren?
    Oder vielleicht rechtfertigen sie sogar die (gruppierte) Verwaltung mittels eigener Objekte, so das nur noch die Referenzen auf diese übergeben/abgelegt werden müssten?


    Ansonsten wäre ein Array, in dem du die Parameter mit Name und Wert übergibst (also bspw. Parametername als Schlüssel), ein anderer Weg - dann könntest du in einer Schleife den Wert für $this->Parametername setzen, in dem du dich des Prinzips der variablen Variablen bedienst.
    Besonders „sauber“ ist das aber natürlich nicht.

    Mit welcher "escaping"-Funktion bin ich 100% auf der sicheren Seite. (MySQL)
    Mit mysql_real_escape_string, bzw. deren MySQLi-Pendant. Oder mit Prepared Statements.

    Das bezieht sich aber natürlich nur auf die Datenbankschnittstelle - nicht die anderen Problem-Kontexte vergessen: Kontextwechsel erkennen und behandeln
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Zitat von wahsaga Beitrag anzeigen
      Als erstes solltest du überlegen, ob ein Objekt wirklich so viele separate, unabhängige Attribute braucht.
      Vielleicht kannst du ja welche davon in Arrays gruppieren?
      Oder vielleicht rechtfertigen sie sogar die (gruppierte) Verwaltung mittels eigener Objekte, so das nur noch die Referenzen auf diese übergeben/abgelegt werden müssten?


      Ansonsten wäre ein Array, in dem du die Parameter mit Name und Wert übergibst (also bspw. Parametername als Schlüssel), ein anderer Weg - dann könntest du in einer Schleife den Wert für $this->Parametername setzen, in dem du dich des Prinzips der variablen Variablen bedienst.
      Besonders „sauber“ ist das aber natürlich nicht.


      Mit mysql_real_escape_string, bzw. deren MySQLi-Pendant. Oder mit Prepared Statements.

      Das bezieht sich aber natürlich nur auf die Datenbankschnittstelle - nicht die anderen Problem-Kontexte vergessen: Kontextwechsel erkennen und behandeln
      Danke erstmal für deine Antwort! An ein Array habe ich auch schon gedacht, aber bedeutet das nicht Performanceverlust? Ich denke schon. Nur die Frage ist wie massiv... Wird ja eine Datenbankklasse, und wenn die einige Querys machen muss, und dabei jedesmal 30ms langsamer ist, summiert sich das....

      Gruss
      TheC0der

      Kommentar


      • #4
        Zitat von TheC0der Beitrag anzeigen
        An ein Array habe ich auch schon gedacht, aber bedeutet das nicht Performanceverlust?
        Diese Frage klingt ein bisschen wie "Passen in eine 1-Liter-Flasche auch 1000,1ml Wasser rein?"

        Davon abgesehen wird deine Klasse bei jedem Aufruf neu instanziiert, insofern bezweifle ich, dass sich da irgendetwas aufsummieren kann.

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Zitat von TheC0der Beitrag anzeigen
          ... An ein Array habe ich auch schon gedacht, aber bedeutet das nicht Performanceverlust? Ich denke schon.
          Woher nimmst du diese Sicherheit? Die Zuweisung eines Arrays an eine objekt-interne Variable könnte wesentlich weniger Aufwand darstellen als jeden Wert einzeln in eine Variable einzutragen. PHP benutzt für die Namen der Member-Variablen eines Objekts Hashtabellen. Jede Verwendung einer solchen Variable "kostet". Wieviel ist aber eine ganz andere Sache. Wenn dich "Performance" wirklich interessierst, testest du beide Varianten einfach mal.

          Nur die Frage ist wie massiv... Wird ja eine Datenbankklasse, und wenn die einige Querys machen muss, und dabei jedesmal 30ms langsamer ist, summiert sich das...
          Nö, da du den Konstruktor (sicher) nur einmalig aufrufst, sollte sich da nichts summieren.

          Und dann möchte ich noch darauf hinweisen, dass es seit Jahren AdoDB (auch in einer "performanten" Light-Version) und PDO gibt. Datenbank-Abstraktions-Layer selber zu basteln kann zwar interessant und lehrreich sein, aber man sollte sich erprobte Lösungen ruhig einmal näher anschauen ...
          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

          Kommentar

          Lädt...
          X