dedlfix: Kurze isset()-Notwendigkeitsfrage

Beitrag lesen

echo $begrüßung;

Na bitte, du kannst es doch. So ist das doch schon viel verständlicher.

Der Zusammenhang mit foreach ist ein negativer: Ein leerer Array wird eben nicht angenommen, darin besteht der Gegensatz und der Unterschied in der ausgelösten Warnstufe (Notice <-> Warning)

Hier muss ich noch mal etwas korrigieren bzw. etwas genauer ausholen. Wenn auf eine bisher unbekannte Variable lesend zugegriffen wird, ergibt das den Wert ein NULL. Die Variable wird dabei noch nicht einmal angelegt, was ein

error_reporting(E_ALL);
  var_dump($nix);
  var_dump($nix);

mit einer zweifachen "Undefined variable"-Notice bestätigt. Noch eine Probe:

$nix = NULL;
  var_dump($nix);

Das erzeugt keine Notice.

NULL wird bei einem expliziten (= extra verlangtem) Typecast in ein leeres Array gewandelt:

var_dump((array)$nix); // Ausgabe: array(0) {}

Alle anderen skalaren Typen (integer, string, ...) werden auch nur bei einem expliziten Typecast in ein Ein-Element-Array gewandelt. Implizite (= nicht extra verlagte, von PHP selbst ausgeführte) Skalar-zu-Array-Typecasts werden stets mit einer Warnung quittiert und nicht ausgeführt. Das ist bei foreach so und bei Funktionen, die ein Array als Parameter haben wollen, auch.

var_dump($nix); // Ausgabe: NULL
  array_push($nix, 'foo');
  var_dump($nix); // Ausgabe: NULL

$nix ist also kein Array geworden, das ein Element mit dem Wert 'foo' enthalten haben sollte.

Für eine derartige "Arbeitsverweigerung" ist eine Warnung mehr als angebracht.

Stell dir vor, ein Programmierer braucht mal eben einen leeren String ('') und hat gerade nur eine Hand  frei (Fettbemme in der linken), will keine Umstände mit der Festelltaste haben, kann sich aber mittels Maus ein bis dato unbenutzes $str irgenwoher kopieren und benutzt es als leeren String

Du könntest Leute kennen... Ich würde denen nicht den "Titel" Programmierer geben.

In Perl gibts zur Verhinderung derlei Murkses die Option -w [...]

Und PHP ist wenigstens so freundlich, mindestens eine Notice zu erzeugen, wenn man diese durch ein E_ALL im error_reporting zulässt.

in vielen anderen Programmiersprachen löst sowas stets eine zum Abbruch führende Exception aus.

Bist du sicher, dass das auch für skalare Variablen so streng gehandhabt wird und nicht nur für nicht initialisierte Objekte, was zu einer Null-Pointer/Reference-Exception führt?

echo "$verabschiedung $name";