Datum: 13.10.2008
, Kategorie:
Meinungen
Dieser Tipp richtet sich an PHP-Neulinge und Wenignutzer.
Variablen wollen initialisiert werden
Erfahrungsgemäß könnte man diesen Hinweis auch getrost an viele erfahrene Programmierer richten. Das ist erstaunlich, sollte man doch meinen, dass die wissen was sie tun. Leider ist dies nicht immer der Fall. Oft lassen sie sich auch sehr ungern belehren und sind deshalb schnell beleidigt. Deshalb ignorieren wir sie an dieser Stelle. ;-)
Variablen, die vor Ihrer Nutzung nicht initialisiert (bzw. definiert) werden, können zu unerwartetem Verhalten der Anwendung führen. Man weiß nämlich nie, welchen Wert diese Variable enthällt. Quellen für unerwartete Wertzuweisungen gibt es genug:
- Die Variable wurde bereits zuvor an anderer Stelle im Code benutzt1
- Die Variable wurde in einer Schleife benutzt und enthält Werte aus dem letzten Schleifendurchlauf
- Wenn register_globals2 eingeschaltet ist, kann eine nicht initialisierte Variable praktisch jeden Wert enthalten, der dem Script per POST, GET oder COOKIE übergeben wurde
Unterstützung bei diesem Problem kann man sich von der Option error_reporting in der php.ini geben lassen. Auf dem eigenen Entwicklungssystem kann man mindestens E_ALL einstellen und wird dann von PHP auf nicht initialisierte Variablen hingewiesen.
Das löst jedoch nur einen Teil der Probleme. Deshalb kann es nicht schaden, Variablen auch ohne Aufforderung durch PHP zu initialisieren. Zwei Gedankenstützen können dabei helfen.
1. Ein zugegebenermaßen recht alter Witz: Hunting an elephant
Computer scientists hunt elephants by exercising Algorithm A:
- Go to Africa
- Start at the Cape of Good Hope
- Work northward in an orderly manner, traversing the continent alternately east and west
- During each traverse pass,
- Catch each animal seen
- Compare each animal caught to a known elephant
- Stop when a match is detected
Experienced computer programmers modify Algorithm A by placing a known elephant in Cairo to ensure that the algorithm will terminate
Assembly language programmers prefer to execute Algorithm A on their hands and knees
Wir machen es also wie die "experienced computer programmers" und platzieren eine Wertzuweisung der Variable im Cairo unseres Scripts oder unserer Funktion.
2. Weniger farbenfroh - Konstanten
Konstanten können in PHP-Scripten generell erst verwendet werden, wenn sie zuvor definiert wurden.
define('MEINE_KONSTANTE', 'Wert123');
Dieses Konzept überträgt man einfach auf Variablen und nach einer Weile macht man's dann automatisch. Hoffentlich.
1) Ein Problem, das gelöst werden kann, indem man Code-Abschnitte kapselt (Objektorientierung) und die einzelnen Abschnitte übersichtlich hält. Eine vorherrschende Meinung ist, dass der Inhalt einer Funktion auf eine Bildschirmseite passen muss.
2) Mit PHP 6 endet das Kapitel register_globals. Das schließt jedoch nicht aus, dass Script-Entwickler POST, GET oder COOKIE manuell globalisieren.