dedlfix: Kurze isset()-Notwendigkeitsfrage

Beitrag lesen

echo $begrüßung;

es geht darum, dass Variablen in meinem Skript manchmal einfach nicht vorhanden sind.

Das ist sehr schlecht. Variablen sollte immer mit einem definierten Wert initialisiert werden. Wenn du es nicht machst, macht es vielleicht ein anderer, wenn register_globals eingeschaltet ist...

[...] bei foreach ($gibtsnet as ...){...} bekommt man eine Warnung: "Warning: Invalid argument supplied for foreach()".

(Aus welchen Gründen) Sollte ich foreach mit if (isset($gibtsnet)) {...} umschließen?

foreach erwartet ein Array[*]. Mit allem anderen ist es kaum sinnvoll die Schleife auszuführen.

Wenn dann also if (isset($var) and is_array($var)) foreach ($var...

Ob es aber sinnvoll ist, die Schleife nicht auszuführen, oder vielleicht lieber die Reißleine zu ziehen (exit), musst du selbst entscheiden.

Oder gar auch bei if?

Das ist kontextabhängig und nicht pauschal beantwortbar.

Ach und noch ne Frage, die ich hier vielleicht auch mal eben unterbringen kann:

Was bedeutet zum Beispiel: if (!$bsp) {} ? Ist das nur für Vars des Typs Boolean gedacht, also als Kurzform von if ($bsp == true) oder vielleicht als Kurzform von !isset($bsp)? Oder ist das gar keine gültige Schreibweise?

if ($bool == true) ist doppelt gemoppelt. Zuerst wird $bool (oder auch jeder beliebige andere Ausdruck) ausgewertet, ob es irgendwie, auch unter Einbeziehung der automatischen Typumwandlung, als einer der beiden boolschen Werte interpretiert werden kann. (Siehe Handbuch-Kapitel Booleans, unter Converting to boolean.) Dieses Ergebnis ist bereits true oder false. Das nochmal mit true oder false zu vergleichen um true oder false zu erhalten ist wenig sinnvoll.

Es ist nur bei === sinnvoll, also wenn die Variable / der Ausdruck unbedingt vom Typ boolean sein muss, um nicht durch eine autom. Typumwandlung "geärgert" zu werden.
Beispielsweise beim Ergebnis der Funktion strpos(): 0 kommt raus, wenn der gesuchte Teilstring am Anfang enthalten ist, aber false kommt raus, wenn er nicht drin ist.

Ich hatte das hier und da mal gelesen und wusste nichts anzufangen, weil ich das "!" sonst als Negierungszeichen ansehe, mir aber nicht klar ist, was eine negierte Variable für eine Bedingung darstellen soll.

Na das Gegenteil. Wenn in $var etwas, das true entspricht steht, ergibt !$var false, und umgekehrt.

echo "$verabschiedung $name";

[*] Ein Object wird durch die automatische Typumwandlung zu einem Array gecastet.