| 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! Post your PHP questions here! |
 |

08-05-2010, 22:08
|
|
TheC0der
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 2
|
|
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
|

08-05-2010, 22:26
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von TheC0der
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.
Zitat:
|
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.
|

08-05-2010, 22:31
|
|
TheC0der
Registrierter Benutzer
|
|
Registriert seit: May 2010
Beiträge: 2
|
|
Zitat:
Zitat von wahsaga
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
|

08-05-2010, 23:14
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von TheC0der
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
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

09-05-2010, 19:57
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von TheC0der
... 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.
Zitat:
|
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 ...
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| 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.
HTML-Code ist aus.
|
|
|
|
PHP News
|