Olly: Variablen global/static ???

Hallo,

ich habe zwei Dateien:

"index.php" mit Inhalt:

<?
include ("fkt.inc.php");

add(4);

echo "---index.php---<br>";

$b = 5;
  $c = $a + $b;

echo "a = ".$a."<br>";
  echo "b = ".$b."<br>";
  echo "c = ".$c."<br>";
?>

"fkt.inc.php" mit Inhalt:

<?
function add($a)
{

$c = $a + $b;

echo "---fkt.inc.php---<br>";
  echo "a = ".$a."<br>";
  echo "b = ".$b."<br>";
  echo "c = ".$c."<br>";
}
?>

Das Problem: Ich will in der index.php auf die Variablen in der funktion add() zugreifen können. Im Moment wird

---fkt.inc.php---
a = 4
b = 5
c = 9
---index.php---
a =
b =
c =

ausgegeben.

"static" bewirkt doch, daß ausserhalb von Funktionen die Variable nicht verloren geht. Warum funktioniert dann nicht ein "static $b = 5" in "fkt.inc.php"?

Vielen Dank für eure Hilfe!!

Olly

  1. hallo
    werte aus einer funktion kannst du mit return zurück geben.
    besonderheit: es ist nur ein rüchgabe wert möglich.
    hierbei ist es egal ob es eine variable oder ein array ist.
    eine zweite möglichkeit ist die ausgabe in der funktion zudeklarieren.

    die dritte und unsauberste lösung ist die globalisierung der variablen.

    nurso

    1. Hi nurso,

      werte aus einer funktion kannst du mit return zurück geben.
      besonderheit: es ist nur ein rüchgabe wert möglich.

      Das funktioniert hier nich!?

      eine zweite möglichkeit ist die ausgabe in der funktion zudeklarieren.

      Genau das möchte ich nicht! Bsp: Es wurde eine Fkt geschrieben, die auf eine DB zugreift, jede Menge Werte raussucht und eine Ausgabe dieser Werte generiert. Jetzt möchte ich nicht nocmal eine Fkt schreiben, die nur einen Wert ausspuckt, sondern nur auf einen Wert in der ersten Fkt zugreifen können. Ist das so nicht möglich?

      die dritte und unsauberste lösung ist die globalisierung der variablen.

      Warum ist das so??

      Danke und Grüße

      Olly

      1. Das funktioniert hier nich!?

        Wie ?
        $variable = functionsaufruf();
        function deinefunction()7
        return $deinevariable; }
        und in $variable ist der rückgabewert der function.

        Genau das möchte ich nicht! Bsp: Es wurde eine Fkt geschrieben, die auf eine DB zugreift, jede Menge Werte raussucht und eine Ausgabe dieser Werte generiert. Jetzt möchte ich nicht nocmal eine Fkt schreiben, die nur einen Wert ausspuckt, sondern nur auf einen Wert in der ersten Fkt zugreifen können. Ist das so nicht möglich?

        das ist ja auch nur eine möglichkeit gewesen.

        die dritte und unsauberste lösung ist die globalisierung der variablen.

        Warum ist das so??

        weil du dann im wieder mit register_globals = on arbeitest.
        naja nicht wirklich aber deine variable ist dann von überall
        abgereifbar.

        Danke und Grüße

        Olly

        nurso

  2. Hello,

    beim Laden des Scriptes bekommt die Funktion einen Anker und ggf. auch Speicherplatz zugewiesen. Wenn sie nun aufgerufen wird, wird der Variablen, die als Static deklariert wurde, ein Displacement vom Anker der Funktion innerhalb des (geschützten) Speicherbereichs der Funktion zugewiesen. Daher ist diese Variable nur für die Funktion selbst zugänglich. Sie ist sozusagen im Code der Funktion versteckt.

    Ich würde mir an Deiner Stelle den anderen Vorschlag nochmal zu Herzen nehmen:

    function test(&$data)
    {

    $data["var1"]="xyz";

    }

    und beim Aufruf muss man dann eben vorher deinen Speicherbereich bereitstellen

    $par = $blah;
    test($par);

    Das ist dann schon ziemlich dicht an OOP.

    Grüße

    Tom