Für Interessenten habe ich dieses Thema zu einem kleinen Artikel erweitert, der die folgenden Informationen in einer etwas besser strukturierten Form enthält: Der endgültige Leitfaden für PHPs Isset und leer
IMHO sollten Sie darüber nachdenken, nicht nur die App "E_NOTICE kompatibel" zu machen, sondern das Ganze neu zu strukturieren. Mit Hunderten von Punkten in Ihrem Code , dass regelmäßig versucht Sounds inexistent Variablen wie ein eher schlecht strukturiertes Programm zu verwenden. Der Versuch, auf nicht vorhandene Variablen zuzugreifen, sollte niemals stattfinden. Andere Sprachen schrecken dies beim Kompilieren zurück. Die Tatsache, dass PHP es Ihnen ermöglicht, bedeutet nicht, dass Sie es tun sollten.
Diese Warnungen sollen Ihnen helfen, Sie nicht stören. Wenn Sie eine Warnung erhalten "Sie versuchen, mit etwas zu arbeiten, das es nicht gibt!" Ihre Reaktion sollte lauten: "Ups, mein Schlimmes, lassen Sie mich das so schnell wie möglich beheben." Wie sonst können Sie den Unterschied zwischen "Variablen, die gut und undefiniert funktionieren" und ehrlich falschem Code erkennen, der zu schwerwiegenden Fehlern führen kann ? Dies ist auch der Grund, warum Sie immer, immer mit einer Fehlerberichterstattung auf 11 entwickeln und Ihren Code so lange einstecken, bis kein einziger mehr vorhanden istNOTICE
ausgestellt wird. Das Deaktivieren der Fehlerberichterstattung gilt nur für Produktionsumgebungen, um Informationslecks zu vermeiden und eine bessere Benutzererfahrung auch bei fehlerhaftem Code zu erzielen.
Um näher darauf einzugehen:
Sie benötigen immer isset
oder empty
irgendwo in Ihrem Code. Die einzige Möglichkeit, deren Auftreten zu reduzieren, besteht darin, Ihre Variablen ordnungsgemäß zu initialisieren. Je nach Situation gibt es verschiedene Möglichkeiten, dies zu tun:
Funktionsargumente:
function foo ($bar, $baz = null) { ... }
Sie müssen nicht überprüfen, ob $bar
oder $baz
sind sie in der Funktion festgelegt, da Sie sie nur festlegen. Sie müssen sich nur darum kümmern, ob ihr Wert zu true
oder false
(oder was auch immer) ausgewertet wird .
Regelmäßige Variablen überall:
$foo = null;
$bar = $baz = 'default value';
Initialisieren Sie Ihre Variablen oben in einem Codeblock, in dem Sie sie verwenden möchten. Dies löst das !isset
Problem, stellt sicher, dass Ihre Variablen immer einen bekannten Standardwert haben, gibt dem Leser eine Vorstellung davon, wie der folgende Code funktioniert, und dient somit auch als eine Art Selbstdokumentation.
Arrays:
$defaults = array('foo' => false, 'bar' => true, 'baz' => 'default value');
$values = array_merge($defaults, $incoming_array);
Auf die gleiche Weise wie oben initialisieren Sie das Array mit Standardwerten und überschreiben diese mit tatsächlichen Werten.
Nehmen wir in den verbleibenden Fällen eine Vorlage an, in der Sie Werte ausgeben, die möglicherweise von einem Controller festgelegt wurden oder nicht. Sie müssen lediglich Folgendes überprüfen:
<table>
<?php if (!empty($foo) && is_array($foo)) : ?>
<?php foreach ($foo as $bar) : ?>
<tr>...</tr>
<?php endforeach; ?>
<?php else : ?>
<tr><td>No Foo!</td></tr>
<?php endif; ?>
</table>
Wenn Sie regelmäßig verwenden array_key_exists
, sollten Sie bewerten, wofür Sie es verwenden. Das einzige Mal, dass es einen Unterschied macht, ist hier:
$array = array('key' => null);
isset($array['key']); // false
array_key_exists('key', $array); // true
Wie oben erwähnt, müssen Sie bei ordnungsgemäßer Initialisierung Ihrer Variablen nicht überprüfen, ob der Schlüssel vorhanden ist oder nicht, da Sie wissen, dass dies der Fall ist. Wenn Sie das Array von einer externen Quelle , wenn es darum, wird der Wert wahrscheinlich nicht sein , null
sondern ''
, 0
, '0'
, false
oder so ähnlich, dh einen Wert können Sie bewerten mit isset
oder empty
, abhängig von Ihrer Absicht. Wenn Sie regelmäßig einen Array Schlüssel gesetzt null
und wollen es alles bedeutet aber false
, dh wenn in dem obigen Beispiel der unterschiedlichen Ergebnisse isset
und array_key_exists
einen Unterschied zu Ihrer Programmlogik zu machen, sollen Sie sich fragen , warum. Die bloße Existenz einer Variablen sollte nicht wichtig sein, nur ihr Wert sollte von Bedeutung sein. Wenn der Schlüssel ein true
/ false
flag ist, verwenden Sietrue
oder false
nicht null
. Die einzige Ausnahme hiervon wären Bibliotheken von Drittanbietern, die null
etwas bedeuten wollen , aber da null
es in PHP so schwer zu erkennen ist, muss ich noch eine Bibliothek finden, die dies tut.