Variable als Parameter-Defaultwert bei Funktionsdeklaration
Tobias Kloth
- php
0 David Tibbe0 Tobias Kloth0 Tom0 Tobias Kloth0 Tom
Hallo alle zusammen,
Kann man bei der Funktionsdeklaration als Default-Wert von Paramtern keine Variablen zuweisen? Also so:
---
$text = "bla";
function foo($txt=$text){ //Zeile 3
echo $txt;
}
foo();
---
ich bekomme immer eine Fehlermeldung (Parse error: parse error, unexpected T_VARIABLE in [...] on line 3). Dabei ist es egal, ob $text ein String, ein Integer oder ein Array ist.
wenn ich dagegen die Funktion so:
---
function foo($txt="bla"){
echo $txt;
}
---
deklariere, funktioniert es. Kann man Variablen nicht so übernehmen (und muss mit "global $text" arbeiten) oder mache ich was falsch?
Grüße aus Nürnberg
Tobias
Hallo Tobias,
Wie so oft hätte dir der Blick ins Manual geholfen ;)
<quote src="http://de3.php.net/manual/de/functions.arguments.php">
Vorgabewerte für Parameter
[...]
Der Vorgabewert muss ein konstanter Ausdruck sein, darf also (zum Beispiel) keine Variable oder Element einer Klasse sein.
</quote>
Grüße
David
Hallo David,
<quote src="http://de3.php.net/manual/de/functions.arguments.php">
die Seite kenne ich, aber...
Der Vorgabewert muss ein konstanter Ausdruck sein, darf also (zum Beispiel) keine Variable oder Element einer Klasse sein.
...verdammt, das habe ich übersehen :-)
Dann muss ich eben mit global oder Konstanten arbeiten - trotzdem danke.
Grüße aus Nürnberg
Tobias
Hallo Tobias,
wäre es nicht eine Idee, überhaupt mit Arrays zu arbeiten?
Das ist ja das schöne an PHP, dass man dann die Anzahl der Funktionsattribute flexibel halten kann. Und die Arrays kannst Du dann vorher mit Variablen füllen.
Jede Funktion hat dann nur noch ein Attribut, nämlich ein Array.
Grüße
Tom
Hallo Tom,
Das ist ja das schöne an PHP, dass man dann die Anzahl der Funktionsattribute flexibel halten kann. Und die Arrays kannst Du dann vorher mit Variablen füllen.
das müsste man aber eben vorher machen, und kann es nicht (zumindest nicht einfach) beim Aufruf direkt machen.
Jede Funktion hat dann nur noch ein Attribut, nämlich ein Array.
Ich habe z.B. eine Funktion db_verbinden() die beim Aufruf mit einer Datenbank (in meinem Fall einer mysql-Datenbank) verbindet. Um nicht bei jedem Aufruf die Verbindungsdaten (die in einem Array stehen) mitgeben zu müssen, wollte ich eben das Array als Parameter mit Defaultwert übergeben (die Verbindungsdaten werden in eine Datei "einstellungen.php" geschrieben - und stehen deshalb nicht innerhalb der Funktion) - was aber leider nicht funktioniert.
Grüße aus Nürnberg
Tobias
Hallo Tobias,
dann solltest Du dich eben mit den Techniken, die hinter der Objektorienierten Programierung stehen, etwas beschäftigen. Du rufst am Anfang Deiner Funktion einfach einen Contructor auf. Wenn das betreffende Element des Arrays leer ist oder nicht übergeben wurde, dann wir es mit einem Standardwert aufgefüllt. Den kannst Du Dir als globale Variable in einer Include-Datei definieren und besser gleich ein
define("Konstante",WertDerKonstanten);
dort reinschreiben. Ich glaube, das geht auch
define("Konstante",$wertDerKonstanten);
Aber natürlich nur einmal, sonst bekommst Du einen "Cannot redefine Constant" Fehler.
Tricks, um mit Varianten zu arbeiten, gibt es in PHP genug. Du kannst auch verschiedene Attribut-Arrays vordefinieren und die dann einfach umschalten:
$uebergabearray = &$predefined[22]
Nun hat $predfined[22] den Alias $uebergabearray.
Grüße
Tom