Probleme mit Variablenvariablen
Hallo,
ich bin recht verzweifelt. Ich habe unter Debian linux lenny php5
installiert. Ich möchte gerne Variablen aus Variablen generieren.
Also:
$n = 1;
$arte = "Test";
$var = ${$arte . $n};
$$var = "Hallo";
echo "$var ist: ${$arte . $n}";
Leider gibt das Echo nur den Variablennamen aus.
Ich habe schon einiges Probiert.
Nach dem Beispiel vom php.net sollte es funktionieren:
<?
$arg = "foo";
$val = "bar";
//${$arg$val} = "in valid"; // Invalid
${$arg . $val} = "working";
echo $foobar; // "working";
//echo $arg$val; // Invalid
//echo ${$arg$val}; // Invalid
echo ${$arg . $val}; // "working"
?>
Kann es sein, dass irgendetwas im php.ini eingestellt werden muß. Ich weiß
nicht weiter.
Vielen Dank für Hilfe.
Marc
Re: Probleme mit Variablenvariablen
Marc Wiemers meinte:
> Hallo,
>
> ich bin recht verzweifelt. Ich habe unter Debian linux lenny php5
> installiert. Ich möchte gerne Variablen aus Variablen generieren.
Warum? Habe jetzt schon etliche Jahre mit PHP verbracht, ohne jemals
variable Variablen benötigt zu haben.
> Kann es sein, dass irgendetwas im php.ini eingestellt werden muß. Ich weiß
> nicht weiter.
Nope.
Ach ja:
Wahrscheinlich willst du (aus deinen Ausführungen werd ich nicht so
recht schlau; und short-tags sind böse):
<?php
$n = 1;
$arte = "Test";
$var = $arte.$n;
$$var = "Hallo";
echo "$var ist: ${$arte . $n}";
?>
Gregor
--
http://photo.gregorkofler.at ::: Landschafts- und Reisefotografie
http://web.gregorkofler.com ::: meine JS-Spielwiese
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Re: Probleme mit Variablenvariablen
Marc Wiemers schrieb:
> Ich möchte gerne Variablen aus Variablen generieren.
Nein, das möchtest du nicht. Du möchtest dein Konzept reparieren.
Variable Variablen sind böse[tm].
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Probleme mit Variablenvariablen
Hallo Gregor,
Gregor Kofler wrote:
> Ach ja:
>
> Wahrscheinlich willst du (aus deinen Ausführungen werd ich nicht so
> recht schlau; und short-tags sind böse):
>
> <?php
>
> $n = 1;
> $arte = "Test";
> $var = $arte.$n;
> $$var = "Hallo";
>
> echo "$var ist: ${$arte . $n}";
>
> ?>
Genau das will ich aber es geht nicht. echo gibt dann kein Hallo aus.
Was gibt es für Alternativen wenn das böse ist?
Marc
Re: Probleme mit Variablenvariablen
Marc Wiemers schrieb:
> Was gibt es für Alternativen wenn das böse ist?
kommt darauf an was du damit erreichen willst.
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: Probleme mit Variablenvariablen
Marc Wiemers schrieb:
> Hallo Gregor,
>
> Gregor Kofler wrote:
>
>> Ach ja:
>>
>> Wahrscheinlich willst du (aus deinen Ausführungen werd ich nicht so
>> recht schlau; und short-tags sind böse):
>>
>> <?php
>>
>> $n = 1;
>> $arte = "Test";
>> $var = $arte.$n;
>> $$var = "Hallo";
>>
>> echo "$var ist: ${$arte . $n}";
>>
>> ?>
>
> Genau das will ich aber es geht nicht. echo gibt dann kein Hallo aus.
Dann kontrolliere noch mal ob du wirklich 1:1 obigen Code verwendet
hast. Wie rufsat du den Code auf: php -f testfile?
Ansonsten kannst du auch noch mit gdb debuggen, wenn es wirklich nicht
geht kannst du ja nochmal deine PHP Pakete de/installieren
>
> Was gibt es für Alternativen wenn das böse ist?
Was willst du damit erreichen.
>
> Marc
Re: Probleme mit Variablenvariablen
Marc Wiemers schrieb:
>> Wahrscheinlich willst du (aus deinen Ausführungen werd ich nicht so
>> recht schlau; und short-tags sind böse):
>>
>> <?php
>>
>> $n = 1;
>> $arte = "Test";
>> $var = $arte.$n;
>> $$var = "Hallo";
>>
>> echo "$var ist: ${$arte . $n}";
>>
>>>
>
> Genau das will ich aber es geht nicht. echo gibt dann kein Hallo aus.
Gregors Vorschlag weicht geringfügig von Deiner Vorgabe ab. Bei Dir steht:
$var = ${$arte . $n};
Das heißt im Klartext: $var = $Test1 und gibt eine Notice "Undedefined
variable", weil $Test1 zu diesem Zeitpunkt noch nicht definiert ist.
Bei Gregor steht:
$var = $arte.$n;
Ohne geschweifte Klammern. Das heißt im Klartext: $var = "Test1" und führt
zu Deinem gewünschtem Ergebnis.
> Was gibt es für Alternativen wenn das böse ist?
Gregor meint nur Short-Tags, also "<?". Diese müssen extra in der php.ini
freigeschaltet werden. Nimm besser immer normale Tags: "<?php". Dann klappts
auch mit dem Nachbarcomputer.
viele grüße
ralph
Re: Probleme mit Variablenvariablen
"Marc Wiemers" <jupiter_42 [at] gmx.de> schrieb im Newsbeitrag news:flresc$82v$1 [at] saphir.steine.home...
> Hallo,
>
> ich bin recht verzweifelt. Ich habe unter Debian linux lenny php5
> installiert. Ich möchte gerne Variablen aus Variablen generieren.
> Also:
> $n = 1;
> $arte = "Test";
> $var = ${$arte . $n};
> $$var = "Hallo";
>
> echo "$var ist: ${$arte . $n}";
> Leider gibt das Echo nur den Variablennamen aus.
> Ich habe schon einiges Probiert.
> Nach dem Beispiel vom php.net sollte es funktionieren:
>
> <?
>
> $arg = "foo";
> $val = "bar";
>
> //${$arg$val} = "in valid"; // Invalid
> ${$arg . $val} = "working";
>
> echo $foobar; // "working";
> //echo $arg$val; // Invalid
> //echo ${$arg$val}; // Invalid
> echo ${$arg . $val}; // "working"
>
> ?>
>
> Kann es sein, dass irgendetwas im php.ini eingestellt werden muß. Ich weiß
> nicht weiter.
>
> Vielen Dank für Hilfe.
>
> Marc
Hi Marc,
Du machst einen kleinen Fehler. $Test1 ist nicht initialisiert.
mit
> $var = ${$arte . $n};
Setzt Du $var auf den Wert aus $Test1. Wenn Du $Test1 vorher setzt,
kannst Du sehen, was passiert:
$Test1="Welt";
$n=1;
$arte="Test";
$var=${$arte.$n};
$$var="Hallo";
echo $var."*".$Test1."*".$Welt."*".$$var;
erzeugt bei mir: Welt*Welt*Hallo*Hallo
Verstanden? Ich glaube, was Du eigentlich wolltest ist:
$n=1;
$arte="Test";
$var=$arte.$n;
$$var="Hallo";
echo $var."*".$$var;
Das erzeugt den Output: Test1*Hallo
Du warst also einmal zu indirect. Wahrscheinlich hast Du geglaubt,
mit $var = ${$arte.$n} konntest Du in $var eine Referenz auf $Test1
erzeugen. Das ist aber nicht so. ${$arte.$n} wird *nur* interpretiert und
ergibt. wie gesagt, den Inhalt von $Test1 (also "").
Gruß Andreas
Re: Probleme mit Variablenvariablen
>"Niels Braczek" <nbraczek [at] freenet.de> schrieb im Newsbeitrag news:flrn52$s9d$02$1 [at] news.t-online.com...
>Marc Wiemers schrieb:
>
>> Ich möchte gerne Variablen aus Variablen generieren.
>
>Nein, das möchtest du nicht. Du möchtest dein Konzept reparieren.
>Variable Variablen sind böse[tm].
>...
Das halte ich für zu sehr vereinfacht.
Die PHP-Sprachentwickler erlauben den Anwendungsentwicklern einen gewissen
Zugriff auf Funktionalitäten des Interpreters. Was man damit anstellen kann,
kann man z.B. in "Structure and Interpretation of Computer Programs" von
Abelson & Sussman nachlesen.
Ich möchte sagen, dass ist schon eine scharfe Waffe - mit der kann man sich
allerdings auch leicht ins Bein schießen :))
Gruß Andreas
Re: Probleme mit Variablenvariablen
> Nein, das möchtest du nicht. Du möchtest dein Konzept reparieren.
> Variable Variablen sind böse[tm].
Naja, in Template-Engines könnte ich mir das vorstellen.
Re: Probleme mit Variablenvariablen
Hallo,
ja was will ich damit.
Die Variable kommt aus einer Abfrage mehrerer Checkboxen.
<INPUT TYPE=hidden Name=Autor1 VALUE=0>
<INPUT TYPE=hidden Name=Autor1 VALUE=123>
<INPUT TYPE=hidden Name=Autor1 VALUE=243>
<INPUT TYPE=hidden Name=Autor2 VALUE=0>
<INPUT TYPE=hidden Name=Autor2 VALUE=234>
<INPUT TYPE=hidden Name=Autor2 VALUE=456>
diese möcht ich gerne auswerten. Wobei ich nicht weiß wieviele Autor es
gibt. Ich habe schon versucht mit isset (${$autor.$n} abzufragen was aber
auch schon nicht ging. Dann haben ich eine Variable anzahlAutoren eingefügt
leider gibt aber ${$test.$n} dann auch nicht das gewünschte aus.
Vielleicht gibt es einen besseren Weg das Auszuwerten?
Vielen Dank für eine Antwort!
Marc
Christoph Herrmann wrote:
> Marc Wiemers schrieb:
>> Was gibt es für Alternativen wenn das böse ist?
>
> kommt darauf an was du damit erreichen willst.
>
Re: Probleme mit Variablenvariablen
Marc Wiemers schrieb:
> ja was will ich damit.
> Die Variable kommt aus einer Abfrage mehrerer Checkboxen.
> <INPUT TYPE=hidden Name=Autor1 VALUE=0>
> <INPUT TYPE=hidden Name=Autor1 VALUE=123>
> <INPUT TYPE=hidden Name=Autor1 VALUE=243>
>
> <INPUT TYPE=hidden Name=Autor2 VALUE=0>
> <INPUT TYPE=hidden Name=Autor2 VALUE=234>
> <INPUT TYPE=hidden Name=Autor2 VALUE=456>
>
> diese möcht ich gerne auswerten. Wobei ich nicht weiß wieviele Autor es
> gibt. Ich habe schon versucht mit isset (${$autor.$n} abzufragen was aber
> auch schon nicht ging. Dann haben ich eine Variable anzahlAutoren eingefügt
> leider gibt aber ${$test.$n} dann auch nicht das gewünschte aus.
Das funktioniert aber nur, wenn register_globals angeschaltet ist oder
simuliert wird. In Verbindung mit solchen Konstrukten können schnell mal
unitialisierte Variablen (wie schon im anderen Beitrag erwähnt) heraus
kommen was beides zusammen ein Sicherheitsrisiko verursacht.
> Vielleicht gibt es einen besseren Weg das Auszuwerten?
> Vielen Dank für eine Antwort!
$counter = 1;
while(isset($_POST['Autor' . $counter]))
{
print $_POST['Autor' . $counter];
++$counter;
}
In der Variante wird nicht auf Variablen, sondern auf die Indizes des
POST Array zugegriffen, wo deine Daten nach dem Bestätigen des Formulars
liegen (solange method="post" im Formtag angegeben wurde). Bevor man
diese speichert in Datenbank oder Datei natürlich noch validieren und
gegebenenfalls maskieren.
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: Probleme mit Variablenvariablen
> <INPUT TYPE=hidden Name=Autor1 VALUE=0>
> <INPUT TYPE=hidden Name=Autor1 VALUE=123>
> <INPUT TYPE=hidden Name=Autor1 VALUE=243>
>
> <INPUT TYPE=hidden Name=Autor2 VALUE=0>
> <INPUT TYPE=hidden Name=Autor2 VALUE=234>
> <INPUT TYPE=hidden Name=Autor2 VALUE=456>
1. Gehören Attribute in HTML in Anführungszeichen. Ich finde
Großschreibung schon nciht schön (und ich glaube, bei XHTML ist die auch
nciht emhr erlaubt?), aber gemischt? (Name)
2. Sind das Hidden-Felder. Keine Checkboxen. Gleiche namen amchen da
keine Sinn, weil ein Wert den anderen überschreibt.
3. Kann man in Formularen Arrays benutzen:
> <input type="checkbox" id="author1" name="autor[]" value="0"> <label
for="autor1">Autor 1</label>
> <input type="checkbox" id="author1" name="autor[]" value="0"> <label
for="autor1">Autor 1</label>
> <input type="checkbox" id="author1" name="autor[]" value="0"> <label
for="autor1">Autor 1</label>
> <input type="checkbox" id="author1" name="autor[]" value="0"> <label
for="autor1">Autor 1</label>
....
Re: Probleme mit Variablenvariablen
..oO(Marc Wiemers)
>ja was will ich damit.
>Die Variable kommt aus einer Abfrage mehrerer Checkboxen.
><INPUT TYPE=hidden Name=Autor1 VALUE=0>
><INPUT TYPE=hidden Name=Autor1 VALUE=123>
><INPUT TYPE=hidden Name=Autor1 VALUE=243>
>
><INPUT TYPE=hidden Name=Autor2 VALUE=0>
><INPUT TYPE=hidden Name=Autor2 VALUE=234>
><INPUT TYPE=hidden Name=Autor2 VALUE=456>
Das sind zwar keine Checkboxen, aber egal. Aber auch dieser Code oben
kann nicht funktionieren - Du wirst immer nur das letzte Element jeden
Namens bekommen, also 243 für 'Autor1' und 456 für 'Autor2'. Willst Du
alle haben, noch dazu in beliebiger Anzahl, dann benutze Array-Syntax:
<input type="checkbox" name="autor1[]" value="0">
<input type="checkbox" name="autor1[]" value="123">
<input type="checkbox" name="autor1[]" value="243">
<input type="checkbox" name="autor2[]" value="0">
<input type="checkbox" name="autor2[]" value="234">
<input type="checkbox" name="autor2[]" value="456">
Siehe dazu auch
11.10. Wie kann man Checkboxen verarbeiten?
http://php-faq.de/q/q-formular-checkbox.html
How do I get all the results from a select multiple HTML tag?
http://www.php.net/manual/en/faq.html.php#faq.html.select-mu ltiple
Wird das Formular nun abgeschickt (angenommen per POST), dann sind -
sofern etwas ausgewählt wurde - $_POST['autor1'] und $_POST['autor2']
Arrays und enthalten die Werte der jeweils ausgewählten Checkboxen.
HTH
Micha
Re: Probleme mit Variablenvariablen
..oO(Jonas Werres)
>> <INPUT TYPE=hidden Name=Autor1 VALUE=0>
>> <INPUT TYPE=hidden Name=Autor1 VALUE=123>
>> <INPUT TYPE=hidden Name=Autor1 VALUE=243>
>>
>> <INPUT TYPE=hidden Name=Autor2 VALUE=0>
>> <INPUT TYPE=hidden Name=Autor2 VALUE=234>
>> <INPUT TYPE=hidden Name=Autor2 VALUE=456>
>
>1. Gehören Attribute in HTML in Anführungszeichen.
Jein. Wenn der Wert nur aus Zahlen, Buchstaben und einer Handvoll
weiterer Zeichen besteht, dann geht's auch ohne. Aber besserer Stil
ist es natürlich, grundsätzlich alle Attributwerte in (einfache oder
doppelte) Anführungszeichen zu setzen. In X(HT)ML ist das ohnehin
vorgeschrieben.
>Ich finde
>Großschreibung schon nciht schön (und ich glaube, bei XHTML ist die auch
>nciht emhr erlaubt?)
Korrekt. X(HT)ML ist case-sensitive, HTML nicht.
Micha
Re: Probleme mit Variablenvariablen
Jonas Werres schrieb:
>> Nein, das möchtest du nicht. Du möchtest dein Konzept reparieren.
>> Variable Variablen sind böse[tm].
>
> Naja, in Template-Engines könnte ich mir das vorstellen.
Da nimmt man Hashes. Statt $$var einfach $data[$var]. Man braucht in
üblichen Anwendungen keine variablen Variablen.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Probleme mit Variablenvariablen
Andreas Thiele schrieb:
>>"Niels Braczek" <nbraczek [at] freenet.de> schrieb im Newsbeitrag news:flrn5=
2$s9d$02$1 [at] news.t-online.com...
>>Marc Wiemers schrieb:
>>
>>> Ich möchte gerne Variablen aus Variablen generieren.
>>
>>Nein, das möchtest du nicht. Du möchtest dein Konzept reparieren.
>>Variable Variablen sind böse[tm].
>>...
>
> Das halte ich für zu sehr vereinfacht.
Ich kenne keine Problemstellung (außerhalb von Debugging zumindest), di=
e
sich nicht mit Hashes lösen ließe.
> Ich möchte sagen, dass ist schon eine scharfe Waffe - mit der kann ma=
n sich
> allerdings auch leicht ins Bein schießen :))
So ein Werkzeug gehört definitiv nicht in Hände von Leuten, die danac=
h
fragen müssen, wie es funktioniert.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Probleme mit Variablenvariablen
Jonas Werres meinte:
>> Nein, das möchtest du nicht. Du möchtest dein Konzept reparieren.
>> Variable Variablen sind böse[tm].
>
> Naja, in Template-Engines könnte ich mir das vorstellen.
Hab ich auch nur assoziative Arrays.
Gregor
--
http://photo.gregorkofler.at ::: Landschafts- und Reisefotografie
http://web.gregorkofler.com ::: meine JS-Spielwiese
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Re: Probleme mit Variablenvariablen
Michael Fesser schrieb:
> ..oO(Jonas Werres)
>
>>> <INPUT TYPE=hidden Name=Autor1 VALUE=0>
>>> <INPUT TYPE=hidden Name=Autor1 VALUE=123>
>>> <INPUT TYPE=hidden Name=Autor1 VALUE=243>
Hier weist Du _einem_ Namen mehrere Werte zu. Das wird nicht
funkionieren. Du musst schon unterschiedliche Namen verwenden oder
Arrays benutzen.
>> 1. Gehören Attribute in HTML in Anführungszeichen.
>
> Jein. Wenn der Wert nur aus Zahlen, Buchstaben und einer Handvoll
> weiterer Zeichen besteht, dann geht's auch ohne.
Falsch. Sie gehören _immer_ in Anführungszeichen. Dass es bei den
meisten Browsern auch ohne funktioniert, ändert daran nichts.
Gruß. Claus
Re: Probleme mit Variablenvariablen
Niels Braczek schrieb:
> Variable Variablen sind böse[tm].
-v
Gruß. Claus
Re: Probleme mit Variablenvariablen
Claus Reibenstein schrieb:
> Niels Braczek schrieb:
>
>> Variable Variablen sind böse[tm].
>
> -v
Das gehört in die gleiche Schublade wie register_globals=3Don oder eval=
().
Wenn man *genau* weiß, was man tut, ist es ok - ansonsten Finger weg.
Debugging wird erheblich erschwert. Man weiß nicht mehr, welche
Variablen im aktuellen Scope existieren. Man kann mit variablen
Variablen nichts machen, was man nicht auch mit assoziativen Arrays
erreichen kann.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Probleme mit Variablenvariablen
..oO(Claus Reibenstein)
>Michael Fesser schrieb:
>
>> Jein. Wenn der Wert nur aus Zahlen, Buchstaben und einer Handvoll
>> weiterer Zeichen besteht, dann geht's auch ohne.
>
>Falsch. Sie gehören _immer_ in Anführungszeichen. Dass es bei den
>meisten Browsern auch ohne funktioniert, ändert daran nichts.
| In certain cases, authors may specify the value of an attribute
| without any quotation marks. The attribute value may only contain
| letters (a-z and A-Z), digits (0-9), hyphens (ASCII decimal 45),
| periods (ASCII decimal 46), underscores (ASCII decimal 95), and colons
| (ASCII decimal 58). We recommend using quotation marks even when it is
| possible to eliminate them.
http://www.w3.org/TR/html401/intro/sgmltut.html#h-3.2.2
Micha
Re: Probleme mit Variablenvariablen
> Hab ich auch nur assoziative Arrays.
Ja, ohne ist amn nciht aufgeschmissen. Aber es sieht schöner aus und das
halte ich bei Templates für nciht zu unterschätzen. Mich nervt schon das
ewige <?php echo $blah ?> bei Symfony im Gegensatz zu {$blah} bei Smarty
(ja, ich weiß, man kann das einbinden). Wenn dazu noch data[""] kommt,
wird es bei vielen Variablen ätzend.
In Templates, wo keine andere Logik drinsteckt, sehe ich auch kein
Problem mit Debugging.
Re: Probleme mit Variablenvariablen
Claus Reibenstein wrote:
> Michael Fesser schrieb:
>> ..oO(Jonas Werres)
>>> 1. Geh=C3=B6ren Attribute in HTML in Anf=C3=BChrungszeichen.
>> Jein. Wenn der Wert nur aus Zahlen, Buchstaben und einer Handvoll
>> weiterer Zeichen besteht, dann geht's auch ohne.
> Falsch. Sie geh=C3=B6ren _immer_ in Anf=C3=BChrungszeichen. Dass es bei=
den
> meisten Browsern auch ohne funktioniert, =C3=A4ndert daran nichts.
Nicht ganz richtig. Ich w=C3=BCrde es zwar nie anders machen, aber in der=
HTML-Spezifikation[1] steht was anderes:
| In certain cases, authors may specify the value of an attribute
| without any quotation marks. The attribute value may only contain
| letters (a-z and A-Z), digits (0-9), hyphens (ASCII decimal 45),
| periods (ASCII decimal 46), underscores (ASCII decimal 95), and
| colons (ASCII decimal 58).
Wie gesagt: Bitte trotzdem nicht machen.
[1] "http://www.w3.org/TR/html401/intro/sgmltut.html#idx-attribu te-6"
Gr=C3=BC=C3=9Fe
Der Stefan
--
"Ich habe nichts gegen Autorit=C3=A4ten, aber ich kann es nicht leiden, w=
enn
mir jemand sagt, was ich zu tun oder zu lassen habe." (Bernd Stromberg)=
http://weblog.ononlinework.de/
Re: Probleme mit Variablenvariablen
Jonas Werres schrieb:
>> Hab ich auch nur assoziative Arrays.
> Ja, ohne ist amn nciht aufgeschmissen. Aber es sieht schöner aus und das
> halte ich bei Templates für nciht zu unterschätzen. Mich nervt schon das
> ewige <?php echo $blah ?> bei Symfony im Gegensatz zu {$blah} bei Smarty
ja was denkst Du denn wie die Daten in Smarty gehalten werden? per magic
__get und __set etwa? Alles steht dort wie zu erwarten in einem
assoziativen array.
MfG, Ulf
Re: Probleme mit Variablenvariablen
Niels Braczek schrieb:
> Das gehört in die gleiche Schublade wie register_globals=on oder eval().
> Wenn man *genau* weiß, was man tut, ist es ok - ansonsten Finger weg.
>
> Debugging wird erheblich erschwert. Man weiß nicht mehr, welche
> Variablen im aktuellen Scope existieren. Man kann mit variablen
> Variablen nichts machen, was man nicht auch mit assoziativen Arrays
> erreichen kann.
Das hat sich wahrscheinlich jemand ausgedacht der Arrays nicht
verstanden hat. ;-)
MfG, Ulf
Re: Probleme mit Variablenvariablen
Ulf Kadner schrieb:
> Niels Braczek schrieb:
>
>> Das gehört in die gleiche Schublade wie register_globals=3Don oder e=
val().
>> Wenn man *genau* weiß, was man tut, ist es ok - ansonsten Finger weg=
=2E
>>
>> Debugging wird erheblich erschwert. Man weiß nicht mehr, welche
>> Variablen im aktuellen Scope existieren. Man kann mit variablen
>> Variablen nichts machen, was man nicht auch mit assoziativen Arrays
>> erreichen kann.
>
> Das hat sich wahrscheinlich jemand ausgedacht der Arrays nicht
> verstanden hat. ;-)
Wahrscheinlich derselbe, der register_globals=3Don als Standard gesetzt
hat und uns den safe_mode beschert hat... ;-)
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Probleme mit Variablenvariablen
Jonas Werres schrieb:
>> Hab ich auch nur assoziative Arrays.
> Ja, ohne ist amn nciht aufgeschmissen. Aber es sieht schöner aus und =
das
> halte ich bei Templates für nciht zu unterschätzen. Mich nervt scho=
n das
> ewige <?php echo $blah ?> bei Symfony im Gegensatz zu {$blah} bei Smart=
y
> (ja, ich weiß, man kann das einbinden). Wenn dazu noch data[""] kommt=
,
> wird es bei vielen Variablen ätzend.
> In Templates, wo keine andere Logik drinsteckt, sehe ich auch kein
> Problem mit Debugging.
In Templates steht überhaupt kein PHP. Statt <?php echo $blah; ?> oder
{$blah} steht da zB. {blah}. Die Ersetzung wird von der Template-Engine
vorgenommen, nicht vom Template. YMMV.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Probleme mit Variablenvariablen
Hallo,
Christoph Herrmann wrote:
>
> $counter = 1;
> while(isset($_POST['Autor' . $counter]))
> {
> print $_POST['Autor' . $counter];
> ++$counter;
> }
>
> In der Variante wird nicht auf Variablen, sondern auf die Indizes des
> POST Array zugegriffen, wo deine Daten nach dem Bestätigen des Formulars
> liegen (solange method="post" im Formtag angegeben wurde). Bevor man
> diese speichert in Datenbank oder Datei natürlich noch validieren und
> gegebenenfalls maskieren.
>
Vielen Dank für die Erklärung. So geht es.
Marc
Re: Probleme mit Variablenvariablen
> In Templates steht überhaupt kein PHP. Statt <?php echo $blah; ?> oder
> {$blah} steht da zB. {blah}. Die Ersetzung wird von der Template-Engine
> vorgenommen, nicht vom Template. YMMV.
Ich wüsste nicht, dass das in der Definition von Template-Engine steht.
Symfony z.B. kompiliert die Templates nicht, sondern macht einfach
PHP-Code. Dem Template zugewiesen wird per __get im Control-Objekt
($this->name) und ist dann im Template z.B. als $name verfügbar.
Re: Probleme mit Variablenvariablen
Ulf Kadner schrieb:
> Niels Braczek schrieb:
>
>> [variable Variablen]
>
> Das hat sich wahrscheinlich jemand ausgedacht der Arrays nicht
> verstanden hat. ;-)
Ich tippe eher auf ein Relikt (aka Altlast) aus jener Zeit, zu der PHP
noch keine assoziativen Arrays kannte. Oder gab's die schon immer?
Gruß. Claus
Re: Probleme mit Variablenvariablen
> ja was denkst Du denn wie die Daten in Smarty gehalten werden? per magic
> __get und __set etwa?
So macht Symfony das wohl im Controlteil, ja. Zumindest nehme ich das
an, weil man dem Controlobjekt einfach die Variablen, die im Template
verfügbar sein sollen, als Attribute zuweist.
> Alles steht dort wie zu erwarten in einem
> assoziativen array.
Ja. Dazu muss man aber kompilieren. Es gibt Templateangines, die nicht
kompilieren. Savant, Symfony-Template, ... und da ist
<?php echo $date["name"] ?> auf die Datuer deutlich unangenehmer als
<?php echo $name ?>
Nicht lebensnotwendig, aber schöner. Und ich sehe keine Probleme,
solange die Templateengine jemand schreibt, der weiß, was er macht.
Re: Probleme mit Variablenvariablen
Jonas Werres schrieb:
>
> Ich wüsste nicht, dass das in der Definition von Template-Engine steh=
t.
Template-Engine !=3D Template.
> Symfony z.B. kompiliert die Templates nicht, sondern macht einfach
> PHP-Code. Dem Template zugewiesen wird per __get im Control-Objekt
> ($this->name) und ist dann im Template z.B. als $name verfügbar.
Dann ist das ein Skript und kein Template. Wie ich schon sagte: YMMV.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Probleme mit Variablenvariablen
Niels Braczek wrote:
> Andreas Thiele schrieb:
>>> "Niels Braczek" <nbraczek [at] freenet.de> schrieb im Newsbeitrag =
news:flrn52$s9d$02$1 [at] news.t-online.com...
>>> Marc Wiemers schrieb:
>>>
>>>> Ich möchte gerne Variablen aus Variablen generieren.
>>>
>>> Nein, das möchtest du nicht. Du möchtest dein Konzept =
reparieren.
>>> Variable Variablen sind böse[tm].
>>> ...
>>
>> Das halte ich für zu sehr vereinfacht.
>
> Ich kenne keine Problemstellung (außerhalb von Debugging zumindest), =
die
> sich nicht mit Hashes lösen ließe.
Ich finde, das ist nicht die Frage. Es gibt auch kein Problem, welches =
nicht
mit einem Assembler-Programm gelöst werden kann. Ist nur die Frage wie =
einfach
oder durchsichtig. Das Prinzip der 'variablen Variablen' stand doch vor =
deren
Einführung schon per eval() zur Verfügung. Konsequenter weise =
müsstest Du dann
die Enfernung von $$ und eval() aus php fordern.
>
>> Ich möchte sagen, dass ist schon eine scharfe Waffe - mit der kann =
man sich
>> allerdings auch leicht ins Bein schießen :))
>
> So ein Werkzeug gehört definitiv nicht in Hände von Leuten, die =
danach
> fragen müssen, wie es funktioniert.
>...
Eine sehr strenge Sicht. Dein Post gibt anderen Leuten Regeln vor.
Richtig finde ich allerdings, dass man solche Konstrukte nicht unnötig =
einsetzt,
dass heißt, man sollte seine Sprache schon kennen.
Andreas
Re: Probleme mit Variablenvariablen
Jonas Werres schrieb:
>> Alles steht dort wie zu erwarten in einem assoziativen array.
> Ja. Dazu muss man aber kompilieren. Es gibt Templateangines, die nicht
> kompilieren. Savant, Symfony-Template, ... und da ist
> <?php echo $date["name"] ?> auf die Datuer deutlich unangenehmer als
> <?php echo $name ?>
Aber dazu brauchts keine variablen Variablen. Hier reicht extract() und
include() in einer Funktion:
function render($file, $vars) {
extract($vars);
include($file);
}
--
"Faulheit ist die Wurzel allen Fortschritts!"
(Inhalt eines Knallbonbons, 2002)
Re: Probleme mit Variablenvariablen
Andreas Thiele schrieb:
> Niels Braczek wrote:
>> Ich kenne keine Problemstellung (außerhalb von Debugging zumindest),=
die
>> sich nicht mit Hashes lösen ließe.
>
> Ich finde, das ist nicht die Frage. Es gibt auch kein Problem, welches =
nicht
> mit einem Assembler-Programm gelöst werden kann. Ist nur die Frage wi=
e einfach
> oder durchsichtig.
Genau. eval() und variable Variablen tragen aber eher zur Obfuskierung
bei statt zur Transparenz.
> Das Prinzip der 'variablen Variablen' stand doch vor deren
> Einführung schon per eval() zur Verfügung. Konsequenter weise müs=
stest Du dann
> die Enfernung von $$ und eval() aus php fordern.
Nein, warum? In Händen von jemandem, der damit umzugehen weiß, möge=
n
diese Möglichkeiten ja sinnvoll sein - wenn ich persönlich das auch
nicht so sehe.
>> So ein Werkzeug gehört definitiv nicht in Hände von Leuten, die da=
nach
>> fragen müssen, wie es funktioniert.
>
> Eine sehr strenge Sicht. Dein Post gibt anderen Leuten Regeln vor.
Mag sein. Ich gebe meine Erfahrung weiter. Meine Regeln[tm] sind
natürlich nicht bindend. Es erspart einem (und gerade Neulingen) jedoch=
viele Probleme, sie zu befolgen. Ich tue es und erwarte es von allen,
die an Projekten unter meiner Aufsicht arbeiten. Was andere tun ist
deren Sache, solange sie nicht nach Lösung ihrer Probleme fragen müss=
en.
(Die Formulierung hört sich wahrscheinlich härter an als sie gemeint =
ist).
> Richtig finde ich allerdings, dass man solche Konstrukte nicht unnöti=
g einsetzt,
> dass heißt, man sollte seine Sprache schon kennen.
Das ist der Punkt. Wer mit eval() und variablen Variablen umzugehen
weiß, soll sie meinetwegen benutzen. Allerdings wird jemand, der damit
umgehen kann, diese Konstrukte idR nicht brauchen.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Probleme mit Variablenvariablen
> Dann ist das ein Skript und kein Template. Wie ich schon sagte: YMMV.
Zeig mir eine Definition, die besagt, dass ein Template kein Template
mehr ist, wenn die Werte mittels <?php echo $wert ?> eingebunden wird.
Symfony macht es so und nennt das Template.
Oder verstehe ich Dich falsch?
Re: Probleme mit Variablenvariablen
Jonas Werres schrieb:
>> Dann ist das ein Skript und kein Template. Wie ich schon sagte: YMMV.
>
> Zeig mir eine Definition, die besagt, dass ein Template kein Template
> mehr ist, wenn die Werte mittels <?php echo $wert ?> eingebunden wird.
Die Definition habe ich genannt. Mir ist klar, dass nicht alle einhellig
meiner Meinung sind, daher sagte ich YMMV.
> Symfony macht es so und nennt das Template.
> Oder verstehe ich Dich falsch?
Das verstehst du schon richtig. <?php echo $wert ?> ist in Templates IMO
schon grenzwertig, weil *prinzipiell* Logik im "Template" untergebracht
werden *kann*. Das entzieht der Anwendung die Kontrolle und ist deswegen
im Prinzip schlechtes Design. Oft wird es aus pragmatischen Gründen
trotzdem gemacht, was daran aber nichts ändert.
Ein weiterer Vorteil echter (=3Dpassiver) Templates ist die Unabhängigk=
eit
von irgendeiner Skriptsprache. Ob ein Template mittels PHP, Basic oder
COBOL befüllt wird, geht das Template (und den Web-Designer !=3D
Programmierer) nichts an.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Probleme mit Variablenvariablen
> Das verstehst du schon richtig. <?php echo $wert ?> ist in Templates IMO
> schon grenzwertig, weil *prinzipiell* Logik im "Template" untergebracht
> werden *kann*. Das entzieht der Anwendung die Kontrolle und ist deswegen
> im Prinzip schlechtes Design.
Warum? Die Datenschicht wird ja auch zumindest teilweise in der gleichen
Sprache gemacht wie der Controlteil und könnte damit theoretisch Logik
enthalten.
Wenn man "könnte theoretisch" aufnimmt, dann gibt es ganz andere
Probleme. Vor allem, weil man ja auch in Smarty PHP reinpressen kann,
wenn man will.
> Ein weiterer Vorteil echter (=passiver) Templates ist die Unabhängigkeit
> von irgendeiner Skriptsprache. Ob ein Template mittels PHP, Basic oder
> COBOL befüllt wird, geht das Template (und den Web-Designer !=
> Programmierer) nichts an.
Natürlich nur, wenn es eine Engine gibt, die diese Templates auch
interpretiert. Wenn man die extra schreiben muss, könnte man (was
zugegebenermaßen ziemlich blöd wäre) auch eine schreiben, die <?php echo
$wert ?> verarbeitet.
Re: Probleme mit Variablenvariablen
Jonas Werres schrieb:
>> Das verstehst du schon richtig. <?php echo $wert ?> ist in Templates I=
MO
>> schon grenzwertig, weil *prinzipiell* Logik im "Template" untergebrach=
t
>> werden *kann*. Das entzieht der Anwendung die Kontrolle und ist desweg=
en
>> im Prinzip schlechtes Design.
> Warum? Die Datenschicht wird ja auch zumindest teilweise in der gleiche=
n
> Sprache gemacht wie der Controlteil und könnte damit theoretisch Logi=
k
> enthalten.
Die Datenschicht hat die Aufgabe, das Speichermedium zu abstrahieren.
Der Controller weiß bei korrekter Implementierung nicht, ob die Daten i=
n
einer Datei oder in einer Datenbank stehen, oder ob die Daten live per
Tastatur oder Satellit ankommen.
> Wenn man "könnte theoretisch" aufnimmt, dann gibt es ganz andere
> Probleme. Vor allem, weil man ja auch in Smarty PHP reinpressen kann,
> wenn man will.
Smarty ist IMHO auch keine empfehlenswerte Template-Engine, eben weil
die Templates Logik enthalten (können).
>> Ein weiterer Vorteil echter (=3Dpassiver) Templates ist die Unabhäng=
igkeit
>> von irgendeiner Skriptsprache. Ob ein Template mittels PHP, Basic oder=
>> COBOL befüllt wird, geht das Template (und den Web-Designer !=3D
>> Programmierer) nichts an.
> Natürlich nur, wenn es eine Engine gibt, die diese Templates auch
> interpretiert. Wenn man die extra schreiben muss, könnte man (was
> zugegebenermaßen ziemlich blöd wäre) auch eine schreiben, die <?p=
hp echo
> $wert ?> verarbeitet.
Klar könnte man das. Das verletzt allerdings den semantischen Grundsatz=
=2E
<?php startet den PHP-Interpreter und sonst nichts.
'<?php echo $' als Starttag und '; ?>' als Endtag für Platzhalter sind
semantischer Unsinn.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------