Notice: Undefined variable - sauberes Programmieren

Registrierer

Erfahrenes Mitglied
Bevor das Projekt an den Start geht, hab ich:
PHP:
error_reporting (E_ALL | E_STRICT);
ini_set ('display_errors' , 1);

was natürlich zur Folge hat, dass ich verschiedene Meldungen bekomme:
- Notice: Undefined variable
- Notice: Undefined index

Dies ist zwar nicht schlimm denke ich, weil die Variablen oder die Indizes eben an diesen Stellen noch nicht definiert sind.
Ich bin mir aber nicht sicher, ob man die Variablen oder die Indizes auf jeden Fall definieren muß/sollte, oder ob dies zur Laufzeit genügt.

Was meint Ihr?
 
Es muss ja einen Grund geben warum die Variablen an der Stelle noch nicht vorhanden sind. Eventuell hängt es damit zusammen das sie erst nach dem Abschicken der Seite mit Werten belegt werden.

Dann würde ich den Zugriff auch davon abhängig machen und sie durch eine IF-Anweisung "ausklammern".
 
Es muss ja einen Grund geben warum die Variablen an der Stelle noch nicht vorhanden sind. Eventuell hängt es damit zusammen das sie erst nach dem Abschicken der Seite mit Werten belegt werden.

Dann würde ich den Zugriff auch davon abhängig machen und sie durch eine IF-Anweisung "ausklammern".

Natürlich hat das einen Grund, eben noch nicht definiert.
Beispiel:
PHP:
<?PHP
// Abfrage ob gesendet
if (!isset($_POST['senden']))
 $adminmeldung = 'nicht gesendet!';
// Ausgabe - noch nicht gesendet
if (isset($adminmeldung) // ZWINGEND?
 echo $adminmeldung;
?>

Die Frage lautete:
Sollte man zwingend entweder die Variable definieren oder prüfen ob sie existiert, oder ist es unerheblich wenn (nur in der Programmierphase) die Meldung:
--- Notice: Undefined variable: adminmeldung ---
erscheint.
 
Zuletzt bearbeitet:
Dann mache ich das jetzt auch mal so.

Die Antwort lautete:

Dann würde ich den Zugriff auch davon abhängig machen und sie durch eine IF-Anweisung "ausklammern".

Im Prinzip spielt es wohl keine Rolle wenn es nur eine Warnung ist. Aber es zeigt trotzdem das nicht sauber programmiert wurde.
 
Im Grunde schon, aber sauber ist es nicht.

Wozu Variablen prüfen wenn sicher ist das sie an dieser Stelle oder zu diesem Zeitpunkt nicht vorhanden/gültig sind?

Wenn es aber, wie du schreibst, nur in der "Programmierphase" ist und du noch am Ablauf was änderst, dann würde ich an deiner Stelle vielleicht nur ein "@" vor die Variablen setzten um die Meldungen zu unterdrücken.
 
Zuletzt bearbeitet:
Sollte man zwingend entweder die Variable definieren oder prüfen ob sie existiert, oder ist es unerheblich wenn (nur in der Programmierphase) die Meldung [...]
Meiner Meinung nach sollte man - egal in welcher Phase der Projektentwicklung man ist - immer sauber programmieren!
Denn willst du es später wieder ändern?

Es ist wirklich mühsam, wenn man in einer der späteren Phasen der Projektentwicklung viel Code refactoring betreiben muss. Klar sowas gibt es immer, aber ob man am Anfang durchgehend sauber programmiert hat, spiegelt sich hier wider.

Also ist es nur eine Stilfrage?
Hierbei muss ich tome widersprechen, es ist keine Stilfrage, es ist eine Frage, ob man ein paar Zeichen mehr oder nicht tippen möchte.

In PHP 6 soll es übrigens dann ein ifsetor geben:
PHP:
<?php

// From http://www.php.net/~derick/meeting-notes.html#ifsetor-as-replacement-for-foo-isset-foo-foo-something-else

// If $_GET['foo'] is set, then its value will be assigned to $foo,
// otherwise 42 will be assigned to $foo.
$foo = ifsetor($_GET['foo'], 42);
?>
Spätestens dann kann ich keinen Menschen mehr verstehen, der dies nicht macht ;)

Wo wir beim Error Control Operator '@' sind: dieser wirkt sich sehr schlecht auf die Performance aus!

Bis zu ~40% langsamer bei 100.000 Durchgängen: http://codepad.org/4NWKZD3D
 
Meiner Meinung nach sollte man - egal in welcher Phase der Projektentwicklung man ist - immer sauber programmieren!
So sehe ich das mittlerweile auch.

Da ich jetzt natürlich mehr oder weniger amüsiert, den in der Vergangenheit geschriebenen Quellcode auch kritischer betrachte, kam ich auf diese Frage und ob sich daraus eventuelle Nachteile ergeben, die ich nicht kenne.
 
Mein Saft:

Bei dem Beispiel oben würde ich $adminmeldung vor initialisieren und immer vom Negativ-Fall ausgehen.

Also z.B. so:

PHP:
<?PHP
$adminmeldung = 'nicht gesendet!';

// Abfrage ob gesendet
if (isset($_POST['senden']))
  $adminmeldung = "gesendet";
?>

Damit wird es nicht nur übersichtlicher, man ist auch davor gefeit, das ein spezielles Verhalten implementiert werden muss.

Geh immer vom Negativfall aus und prüfe ob es positiv werden könnte, sprich ob alle Fälle für das positive Verhalten gegeben sind.
 
Eigentlich sollte jeder mal eine Zeit lang in C geschrieben haben – da lernt man sich unsauberes Programmieren ab, weil die Meldungen nicht nur doof aus sehen, sondern auch dafür sorgen, dass das ganze Skript nicht läuft. Man sollte da nur mal probieren, eine Variable nicht zu definieren ..
 

Neue Beiträge

Zurück