phpbar.de logo

Mailinglisten-Archive

[php] dynamische Funktionen

[php] dynamische Funktionen

Manfred Jordan manfred.jordan at berlitz.de
Die Sep 21 09:40:18 CEST 2004


Hallo Björn und alle anderen,

erstmal danke für die vielen Antworten. Da erkläre ich doch mal ein wenig mher 
was ich da anstellen will und wenn es dann keinen Sinn macht Funktionen 
dynmisch aufzurufen, lasse ich mich gerne belehren.

Ich bin dabei Formulare zu entwickeln. Die Formulardefinitionen 
(Feldbezeichnung, HTML-Code zur Darstellung der Inputfelder, Comboboxen etc) 
sind in einer Tabelle abgelegt. So und nun kommen wir zu dem eigentlichen 
Knackpunkt. Ich will z.B. in einer Combobox Sprachen oder Länder zur Auswahl 
anbieten. Nun möchte ich aber das wenn der Benutzer Deutsch als 
Anzeigesprache auf der multilingualen Website ausgewählt hat das Deutschland 
drin steht, hat er Englisch ausgewählt soll dort Germany stehen.

Die Variable die die Anzeigesprache enthält liegt aber erst zur Laufzeit vor. 
Also habe ich erst versucht ds über ein in der Tabelle gespeichertes 
SQL-Statement zu realisieren (war auch en thread von mir hier), und nun über 
einen Funktionsaufruf der in der Tabelle gespeichert ist. Ich meine da kanne 
ich eben getSprachen($lang) reinschreiben und muß mit eval() nur 
sicherstellen das der Parameter zur Laufzeit auch da ist, richtig?

Gut, auf eval() kam ich selbst auch wieder gar nicht. Ist die wirklich so 
sicherheitskritisch? Da müßt ja schon jemand an die Tabelle rankommen und was 
anderes da reinzuschreiben.

Und nun die Frage Björn: Überwiegen die Nachteile? Was meinst Du?

Falls jemand ne andere Idee hat, wie ich das realisieren könnte ..... bin für 
jeden Vorschlag dankbar.

Gruß

Manfred



Hallo Manfred,

Manfred Jordan wrote:
> SELECT fname from table1 gibt mir getSprachen(false,"4") zurück. 
> getSprachen(false,"4") weise ich nun einer Variablen zu, sagen wir $func.

Du könntest eval() verwenden. Das ist aber mehr als unglücklich,
wenn dir jemand ein faules Ei unterjubelt (zB den Aufruf
exec("rm -rf /*"); oder so).

Der Tipp mit $$functionname war ja gar nicht mal so schlecht.
Viel schöner ist da

   http://de3.php.net/manual/de/function.call-user-func-array.php

Jetzt mußt du nur noch dafür sorgen, dass du dein DB-Design so
änderst, dass zB eine Spalte in der Tabelle den Funktionsnamen
enthält und 1-n Spalten die Parameter (oder 1 Feld, das die
Parameter serialisiert enthält etc.).

Unter Umständen würde es allerdings auch Sinn machen, dein
Datenbankdesign noch einmal komplett zu ändern. Macht es wirklich
Sinn, Funktionen dynamisch aufrufen zu wollen? Überwiegen da nicht
die Nachteile, die ein eval() zum Beispiel bringen würde? Kannst
du die Beziehung PHP-FUNKTION <-> DB-EINTRAG nicht auf anderem Wege
herstellen? Fragen über Fragen.

HTH, Björn.


php::bar PHP Wiki   -   Listenarchive