undefinierte Variablen auf Standard-Werte
Rike-Benjamin Schuppner
- php
Hallo,
gibt es eine Funktion (oder doch eher ein Konstrukt) in PHP mit dem ich potentiell uninitialisierte Variablen umschließen kann, so dass diesen ein Standardwert zugewiesen wird?
Ansonsten muss ich ja schon bevor ich die Variablen in eine Funktion übergebe das ganze mit isset($var) überprüfen um die "Notice: Undefined variable"-Meldung zu umgehen.
Vom Programmierprinzip sollte es ja auch kein Problem darstellen, meine Funktion, die ich - sehr oft - aufrufe könnte dies ja schließlich auch überprüfen.
Oder wäre es sinnig die Variable mit &$var zu übergeben? Klappt aber leider auch nicht in jedem Fall, da ich teilweise noch einen String an die Variable anhänge. Dann meckert er richtig!
Gruß
rbs
Hallo,
so gehts vielleicht
....
if($vari=="")
{
$vari = "abc";
}
....
MFG
Andavos
Hallo,
if($vari=="")
{
$vari = "abc";
}
Ist soweit klar (natürlich muss der Vergleich mit isset() gemacht werden), aber eben das will ich kürzer haben.
Gruß
rbs
hi,
gibt es eine Funktion (oder doch eher ein Konstrukt) in PHP mit dem ich potentiell uninitialisierte Variablen umschließen kann, so dass diesen ein Standardwert zugewiesen wird?
Ansonsten muss ich ja schon bevor ich die Variablen in eine Funktion übergebe das ganze mit isset($var) überprüfen um die "Notice: Undefined variable"-Meldung zu umgehen.
ich weiss nicht, ob ich dein anliegen richtig verstehe ...
du kannst funktionen so definieren, dass für ihre parameter standard-werte genommen werden, wenn nicht explizit ein wert beim aufruf der funktion mitgegeben wird.
http://www.php.net/manual/de/functions.arguments.php
gruss,
wahsaga
Hallo wahsaga,
du kannst funktionen so definieren, dass für ihre parameter standard-werte genommen werden, wenn nicht explizit ein wert beim aufruf der funktion mitgegeben wird.
Dann kommt aber leider trotzdem die "Notice: Undefined variable"-Meldung, die ich zwar nützlich finde, ich aber keine Lust habe für so und so viele Variablen einen isset()-Check durchzuführen, bevor ich sie an eine Funktion übergebe.
Den isset()-Check würde ich ja gar nicht auslassen wollen, ich möchte ihn nur in der Funktion, die ich mit der Variablen aufrufe, durchführen.
Dafür suche ich eine Lösung...
Gruß
Rike
hi, ein kurzes codebeispiel würde helfen das ganze besser zu
verstehen. Wieviele Variablen willst du den übergeben, welche
Variablen und wie sieht die Funktion aus.
Zur Not köntest du auch das error-reporting mit @ unterdrücken.
Fals das ganze über $_REQUEST kommt kannst du ja gleich das ganze übergeben.
schöne grüße
FICHTL
Hallo,
hi, ein kurzes codebeispiel würde helfen das ganze besser zu
verstehen. Wieviele Variablen willst du den übergeben, welche
Variablen und wie sieht die Funktion aus.
Also erstmal habe ich eine Funktion metatag(), welche mir mit zwei Parametern einen Metatag generiert:
function metatag($name, $content) {
if ((!empty($name))&&(!empty($content)))
print '<meta name="'.$name.'" content="'.$content.'" />'; }
So weit, so gut.
Die Variablen übergebe ich in den meisten Fällen so:
metatag('author', $meta['autor']); ...
, wobei ich einige (nicht alle) Elemente von $meta einbinde.
Nun ist es aber so, dass das Script für jede Seite meiner HP ausgeführt werden soll; nur sind nicht auf jeder Seite explizit alle Elemente von $meta vergeben.
Das PHP mich nun also darauf hinweist, dass die Variable undefiniert ist, mag ja schön und gut sein und ich habe ja auch in metatag() eine Überprüfung dafür eingebaut.
Aber muss ich nun wirklich zu jedem Element eine extra Zeile einbauen:
if (isset($meta['blah']))
metatag('blah', $meta['blah']);
Da kommen nämlich schon einige zusammen.
Fals das ganze über $_REQUEST kommt kannst du ja gleich das ganze übergeben.
Dann habe ich aber in der Funktion das gleiche Spiel, da ich ja eben nicht alle Elemente des Arrays nutzen möchte. Und an manche Elemente auch noch einen Standardstring hängen will.
Gruß
rbs
Nun ist es aber so, dass das Script für jede Seite meiner HP ausgeführt werden soll; nur sind nicht auf jeder Seite explizit alle Elemente von $meta vergeben.
hallo, so weit ich das jetzt verstanden habe hast du auf
jeder seite einige dieser Anweisungen:
metatag('author', $meta['autor']);
metatag('keywords', $meta['keywords']);
...
die dann nach der Reihe die jeweiligen Metatags ausführen.
Fals du jetzt auf jeder Seite nur bestimmte Metas verweden willst,
kannst du das ja mittels Schleife machen. Zuerst festlegen welche
dann testen dann ausgeben.
$usedMetas = array('author','keywords');
foreach ($usedMetas as $usedMeta) {
if (isset($meta[$usedMeta])) {
metatag($usedMeta, $meta[$usedMeta])
}
}
Ich hoffe ich hab das so richtig verstanden und das hilft dir jetzt
weiter. Wenn nicht einfach noch besser erklären.
Schöne Grüße
FICHTL
hallo, so weit ich das jetzt verstanden habe hast du auf
jeder seite einige dieser Anweisungen:metatag('author', $meta['autor']);
metatag('keywords', $meta['keywords']);
...die dann nach der Reihe die jeweiligen Metatags ausführen.
Nicht ganz! Auf jeder Seite definiere ich das $meta mit einer Liste an Zuweisungen:
$meta['autor'] = 'ich'; $meta['keywords'] = 'internetseite';
Dann wird ein globales Script aufgerufen, welches die metatag()-Funktion benutzt.
metatag('author', $meta['autor']);
metatag('keywords', $meta['keywords']);
metatag('DC.Creator', $meta['autor']);
In diesem Script mache ich es eher selektierend, da ich in $meta auch noch andere Daten speichere und manche Daten auch mehrmals verwende, ohne sie mehrmals speichern zu wollen. Siehe DC.Creator.
foreach scheidet also demnach aus.
Wenn ich die Variable als Referenz übergebe
metatag('author', &$meta['autor']);
dann meckert er nicht, aber dann kann ich auch keine Standardkeywords übergeben:
metatag('keywords', &$meta['keywords'].', homepage, wissen, php');
funktioniert (natürlich) nicht.
Gruß
rbs