dedlfix: Variablen definieren?

Beitrag lesen

echo $begrüßung;

Es geht mir darum, dass ich mein Script korrekt haben möchte, dass heisst mit jeder PHP Version läuft.

Definiere "jede" - von Version 1.0 (die ebenfalls vor 10 Jahren erschienen ist) bis hin zu zukünftigen Versionen?
Die Versionsnummer allein garantiert noch für gar nichts. Es kommt auch immer noch auf die jeweils eingestellte Konfiguration an - Safe Mode, Short Open Tags, Register Globals, Magic Quotes, usw. usf.

Es scheinst mir, dass du viel zu hohe Ziele hast. Ich entnehme deiner Frage, dass du noch nicht genügend Wissen und Erfahrungen hast und trotzdem versuchst du schon deine Scripte unters Volk zu bringen. Bist du sicher, dass du das mit deinem derzeitigen Kenntnisstand verantworten kannst?

Aber um eine allgemeine Antwort auf die allgemeine Frage zu geben: Stelle die Konfiguration deiner Entwicklungsumbegung so restriktiv wie es nur geht ein und sei auch auf alle anderen Einstellmöglichkeiten gefasst (Stichwort Magic Quotes), dann steigen die Chanchen für eine allgmeine Lauffähigkeit deiner Scripte.

Mitunter sehe ich es aber als nicht sinnvoll an, jede Version unterstützen zu wollen (ich beschränke mich dazu mal auf Version 4 und 5). Das Klassen-Konzept wurde in Version 5 entscheidend verbessert. Wer diese neuen Möglichkeiten einsetzen möchte, weil damit einiges leichter geht, wird sicherlich zu Recht in Erwägung ziehen wollen, PHP5 vorauszusetzen.

Ich weiss halt nicht mehr ob und wie ich eine Variable vorher definieren muss. Oder muss ich dies nur tun, wenn ich diese mit get oder post übertragen möchte?

Grundsätzlich ist es nicht erforderlich, eine PHP-Variable vorher zu definieren, da sie just im Moment des ersten Auftauchens angelegt wird. Das haben dir aber sicher schon das Handbuch und/oder diverse andere Tutorien gesagt.
Es ist aber kein guter Stil und kann auch bedenklich sein, lesend auf Variablen zuzugreifen, denen entweder kein Wert zugewiesen ist oder von deren Existenz man sich nicht überzeugt hat (wenn es sich um eine von PHP bereitgestellte Variable handelt). Ergebnis dieser Unterlassungen sind oftmals Folgefehler oder Einschleusbarkeit fremden Inhalts. Für Ersteres gibt es genügend Fragen dieser Art im Archiv. Ansonsten verweise ich auf die Handbuchkapitel Using Register Globals und User Submitted Data.

  1. garnicht, einfach anwenden

Anwenden im Sinne von lesendem Zugriff ist meist weniger gut. Besser ist: Einen definierten Wert zuweisen, dann anwenden.
Für über register_globals eingeschleuste Variablen gilt das unter 3. gesagte.

PHP bietet auch Konstanten an. Werte, die sich im Laufe des Scripts nicht ändern - beispielweise Zugangsdaten für eine Datenbank -, sind gute Kandidaten für Konstanten.

Die Notice-Meldungen, die bei error_reporting = E_ALL erzeugt werden, können beim Aufspüren von Tippfehlern oder nicht initialisierten Variablen hilfreich sein. error_reporting auf E_ALL zu setzen gehört übrigens auch zu den restriktiven Einstellungen. Siehe dazu Error Reporting und Error Handling and Logging Functions.

  1. settype($sid, "string");

Der konkrete Typ ist in vielen Fällen belanglos, da ihn sich PHP sowieso zurechtbiegt mit seiner automatischen Typumwandlung. Hier kommt es immer auf den jeweiligen Einzelfall an.

  1. $_SESSION["userx"];

Dies erweitere ich einfach mal auf alle EGPCS-Variablen. Auf das Vorhandensein dieser von PHP bereitgestellten Variablen [*] sollte man sich nicht verlassen. Hier hilft isset(), empty(), is_numeric(), usw.

Letzten Endes muss jeder selber aus seinen Fehlern lernen oder durch gezieltes Probieren sein Wissen erweitern, wann man was beachten muss und wie es am besten/sinnvollsten zu realisieren ist.

echo "$verabschiedung $name";

[*] genauer gesagt: das Vorhandensein eines Elements mit einem bestimmten Schlüssel in diesen Arrays