Variablen Namen Name von anderer Variable
Hannes
- php
Hi.
Ich habe ein Problem und mein Kopf platzt gleich, ich glaube ich gehe es völlig falsch an.
$include_files = array('footer', 'header');
foreach($include_files as $files_name) {
ob_start();
@include($dir.'/'.$files_name.'.php');
$files_name = ob_get_contents(); // Variable soll so heissen wie Array Eintrag
ob_end_clean();
}
Die Variable '$files_name = ...' soll eigentlich so heissen wie der Array Eintrag, sprich dass ich später mit $footer bzw. $header den Inhalt der includedeten Datei ausgeben kann.
Ich denke da an,
$.$files_name = ... ;
natürlich geht es das nicht ;-)
Besten Dank für eure Hilfe.
Ich denke da an,
$.$files_name = ... ;
natürlich geht es das nicht ;-)
Ich denke da an
$$files_name = ... ;
Viel Vergnügen.
Ich denke da an
$$files_name = ... ;
Es geht auch mit
${$files_name} = ... ;
ich finde es ein wenig übersichtlicher aber es müsste wurscht sein.
intressant wäre mal zu wissen wo das in der php-documentation erwähnt wird, weiss das einer?
gruss,
robbe
hi,
Ich denke da an
$$files_name = ... ;
Es geht auch mit
${$files_name} = ... ;
ich finde es ein wenig übersichtlicher aber es müsste wurscht sein.
Also ich denke da eher an Arrays ...
intressant wäre mal zu wissen wo das in der php-documentation erwähnt wird, weiss das einer?
http://www.php.net/manual/de/language.variables.variable.php
gruß,
wahsaga
Also ich denke da eher an Arrays ...
wieso? - er iteriert doch schon darüber.
http://www.php.net/manual/de/language.variables.variable.php
ahh :))
gruss,
robbe
wieso? - er iteriert doch schon darüber.
ok, vergisses was ich sagte du ich hats in einem anderen zusammenhang verstanden, meintest sicher dies: ${$a[1]} <> ${$a}[1]
gruss,
robbe
Hi,
ok, vergisses was ich sagte du ich hats in einem anderen zusammenhang verstanden, meintest sicher dies: ${$a[1]} <> ${$a}[1]
nein, er meinte: $$irgendwas != $array[$irgendwas]. Letzteres ist sinnvoll, ersteres in annähernd 100% aller Fälle weit davon entfernt.
Cheatah
Ich stehe jetzt allerdings vor erneutem Problem, in anderem Zusammenhang.
Auf der index.php rufe ich mittels:
replace_includes($include_files,$dir);
Dann anschließend,
replace_includes_doc($include_files,$template);
Eine Funktion auf die in func.php liegt (wird an top der page eingebunden). In der steht:
<?
function replace_includes($include_files,$dir) {
foreach($include_files as $files_name) {
ob_start(); // Startet Buffer
@include($dir.'/'.$files_name.'.php');
$$files_name = ob_get_contents();
ob_end_clean(); // Löscht Buffer
}
}
function replace_includes_doc($include_files,$template) {
foreach($include_files as $wert) {
$template->replace($wert, $$wert);
}
}
?>
In der Funktion replace_includes existieren die Variablen noch wenn ich sie ausgebe, sobald ich dann aber in Funktion replace_includes_doc die Variablen eigentlich ersetzen will, bringt er mir die Fehlermeldung "Notice: Undefined variable: header..." usw.
Wenn ich zwischen den beiden Funktionen die Variable einfüge die er ausgeben soll, kommt ebenfalls die Meldung dass die Var nicht definiert ist.
BSP.
replace_includes($include_files,$dir);
echo $header;
replace_includes_doc($include_files,$template);
Ein global in die ersten Funktion einzufügen bringt auch kein Erfolg.
Was mache ich falsch?
Hi,
Ich stehe jetzt allerdings vor erneutem Problem, in anderem Zusammenhang.
Du hast allerdings die wichtigen und richtigen Hinweise diverser Poster nicht beherzigt, die Dir von Deinem bisherigen Vorgehen scharf abraten.
In der Funktion replace_includes existieren die Variablen noch wenn ich sie ausgebe, sobald ich dann aber in Funktion replace_includes_doc die Variablen eigentlich ersetzen will, bringt er mir die Fehlermeldung "Notice: Undefined variable: header..." usw.
Um es noch einmal ganz deutlich zu sagen: Das Konzept "variable Variablen" ist kompletter Schrott. So etwas zu tun ist dumm. Wenn Du unter Beibehaltung dieses groben Unfugs die Problematik des Gültigkeitsbereiches von Variablen lösen willst, dann reitest Du Dich stetig tiefer in einen Sumpf programmatischen Schwachsinns rein, aus dem Du irgendwann nicht mehr rauskommst. Eliminiere die variablen Variablen *jetzt* und kümmere Dich dann darum, dass das eine Array, welches Du benötigst, dem globalen Scope und den einzelnen Funktionen bekannt ist.
Cheatah
Um es noch einmal ganz deutlich zu sagen: Das Konzept "variable Variablen" ist kompletter Schrott. So etwas zu tun ist dumm. Wenn Du unter Beibehaltung dieses groben Unfugs die Problematik des Gültigkeitsbereiches von Variablen lösen willst, dann reitest Du Dich stetig tiefer in einen Sumpf programmatischen Schwachsinns rein, aus dem Du irgendwann nicht mehr rauskommst. Eliminiere die variablen Variablen *jetzt* und kümmere Dich dann darum, dass das eine Array, welches Du benötigst, dem globalen Scope und den einzelnen Funktionen bekannt ist.
Da schalte ich mich doch auch nochmals ein weil es mich interessiert. Weshalb findest du das Konzept von Hannes einen kompletten Schrott bzw. weshalb findest du das Konzept '$$beispiel' für sinnlos? Gibt es denn noch andere Lösungen dass ganze so automatisiert zu machen wie er es zu lösen versucht?
Grüße,
Matt
Gibt es denn noch andere Lösungen dass ganze so automatisiert zu machen wie er es zu lösen versucht?
Du rätst ihm also doch ein Array anstatt der $$beispiel zu benutzen?
Hm hier gibts wohl keine Editier-Funktion, dann muss ein erneuter Post her.
hi,
Du rätst ihm also doch ein Array anstatt der $$beispiel zu benutzen?
In den allermeisten Fällen gelangen Anfänger in die Versuchung, sich des Konzeptes der variablen Variablen bedienen zu wollen, wenn sie sowas haben
$name1 = "Otto";
$name2 = "Hans";
$name3 = "Trine",
und dann darüber iterieren wollen.
Schon alleine die Tatsache, dass alle drei Datenfelder das gleiche beinhalten - einen Namen - und im gleichen Kontext verwendet werden sollen, macht ein Array nicht nur zur Alternative, sondern erzwingt ein solches geradezu.
Hier im Beispiel sind's halt keine Personennamen, sondern die Template-Bestandteile footer, header, ..., die verwaltet werden sollen.
Auch hier ist ein Array, welches Einträge mit den Key 'footer', 'header', etc., enthält sehr viel angebrachter, und auf Dauer auch komfortabler zu benutzen.
Es ist vor allem deshalb angebracht, weil es Daten, die logisch zusammengehören, auch "zusammenhält" - anstatt sie in mehreren einzelnen (skalaren) Variablen irgendwo "rumfliegen" zu lassen.
gruß,
wahsaga
Hi,
Da schalte ich mich doch auch nochmals ein weil es mich interessiert.
mich freut Dein Interesse, aber ...
Weshalb findest du das Konzept von Hannes einen kompletten Schrott bzw. weshalb findest du das Konzept '$$beispiel' für sinnlos?
... warum schaltest Du nicht einfach neben Dir noch die Archivsuche ein? Eine Suche nach "variable Variablen" sollte erhellend genug sein.
Gibt es denn noch andere Lösungen dass ganze so automatisiert zu machen wie er es zu lösen versucht?
Es gibt nur extremst[1] seltene Fälle, in denen ein assoziatives Array nicht als vollständiger "Ersatz" dienen kann, bzw. genauer gesagt in Wirklichkeit exakt das ist, was man benutzen möchte.
Cheatah
[1] Ja, "äußerstst". Hyperlativ.
hi,
Also ich denke da eher an Arrays ...
wieso?
Weil das Konzept der variablen Variablen nur ein Notbehelf ist - der sich in > 99.9% aller Fälle gut durch ein Array ersetzen lassen dürfte.
gruß,
wahsaga
Weil das Konzept der variablen Variablen nur ein Notbehelf ist - der sich in > 99.9% aller Fälle gut durch ein Array ersetzen lassen dürfte.
jep, das finde ich auch, kenne dieses konzept auch nur von "lockeren" (untypisierten) sprachen wie php oder javascript..
gruss,
robbe