Globale Variablen nicht global
MankoFranko
- php
0 Tom
Hallo,
meine PHP-Kenntnisse sind eher bescheiden, schreibe normalerweise lieber in Perl. Hier brauche ich es aber.
Hab zu meiner Frage das Internet und auch das Forumsarchiv bemüht. Und eigentlich müsste mein Skript so wie es ist funktionieren, tut es aber nicht.
Mein Problem ist, dass zwei als global definierte Variablen in einer Unterfunktion als nicht deklariert bemängelt werden. Hier die wichtigsten Ausszüge aus dem Skript:
<body>
<?php
global $siteState;
global $thisFile;
$siteState = "";
$thisFile = ereg_replace("/(.*)","\1",$_SERVER['PHP_SELF']);
openFiles();
//...hier kommt noch 'ne Menge anderes Zeug
function openFiles() {
//...hier ist Code
if($siteState == "") {
$fp = fopen("logs/openFiles.log","a");
fwrite($fp, $thisFile . "\n");
fclose($fp);
}
}
?>
<!-- hier ist HTML code -->
Wie gesagt informiert mich der Parser, dass in der Funktion openFiles() die Variablen $siteState und $thisFile nicht deklariert sind.
Was hab ich falsch gemacht?
Noch eine Frage dazu:
Kann ich aus dem HTML-Code heraus auf globale Variablen (so denn sie funktionieren) zugreifen?
Ich will beispielsweise schreiben:
<table border="0" class="<? echo $siteState ?>">
Kann das so funktionieren?
Danke für eure Antworten!
Mfg, MF
Hello,
GLOBAL funktionier bei PHP "von innen nach außen". Da Variablen alle implizit deklariert werden, und eine Funktion eine Namensraumabgrenzung betreibt, muss man innerhalb der Funktion die Variable als Global deklarieren. Dann weiß der parser, dass er ´diese Variable nicht neu anzulegen hat, sondern aus der der Funtion übergeordneten Schicht entnimmt.
Um sicherzugehen, dass es bei manchen älteren PHP-Versionen da keinen Fehler gibt, sollte man die Variable vor der Funktionsnutzung außerhalb der Funktion initialisieren.
Im übrigen sollte man überhaupt nicht mit Globals arbeiten, sondern bestenfalls mit den Auto_superglobalen Arrays $_POST, $_GET, $_COOKIE, S_SERVER und dem Superglobalen Array $_SESSION
Darüberhinaus immer alle Daten als Aufrufparameter an die Funktion übergeben. Dann klappts auch mit der Mehrfachnutzung von Funktionen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom