Michael Kaczalak: Variablenübergabe bei Funktion

Hallo,

kann mir jemand sagen, warum das nicht funktioniert?

  
<?php  
  
$array['test'] = "hallo";  
  
echo $array['test']; // Ausgabe: hallo  
  
function array_ausgabe($var) {  
 echo $array[$var];  
}  
array_ausgabe("test"); // keine Ausgabe ? Warum  
  
?>  

Danke für die Aufklärung...

  1. Hallo Michael.

    kann mir jemand sagen, warum das nicht funktioniert?

    <?php

    $array['test'] = "hallo";

    echo $array['test']; // Ausgabe: hallo

    function array_ausgabe($var) {
    echo $array[$var];
    }
    array_ausgabe("test"); // keine Ausgabe ? Warum

    ?>

      
    Woher soll die Funktion array\_ausgabe() von deinem global deklarierten Array $array wissen?  
      
    Übergib diesen als zweiten Parameter der Funktion array\_ausgabe(), dann weiß diese auch, worauf sie sich beziehen soll.  
      
    Im Übrigen solltest du in der Entwicklungsphase \*immer\* [error_reporting](http://de2.php.net/manual/en/function.error-reporting.php)([E_ALL](http://de2.php.net/manual/en/ref.errorfunc.php#e-all)) nutzen.  
      
      
    Einen schönen Sonntag noch.  
      
    Gruß, Ashura  
    
    -- 
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|  
    [<mathbr:del.icio.us/>](http://del.icio.us/mathbr)
    
    1. Hallo Ashura,

      Woher soll die Funktion array_ausgabe() von deinem global deklarierten Array $array wissen?

      Umsteiger auf PHP werden sich möglicherweise die Frage stellen:
      "Warum sind in PHP globale Variablen nicht global?"

      Freundliche Grüße

      Vinzenz,
      der's weiß und der der Maxime anhängt: Sowenige globale Variablen wie möglich, nur so viele wie unbedingt nötig.

      1. Hallo Vinzenz.

        Umsteiger auf PHP werden sich möglicherweise die Frage stellen:
        "Warum sind in PHP globale Variablen nicht global?"

        Antwort: sie sind es. Damit gelten sie aber auch nur im globalen Geltungsbereich (=Scope). PHP ist nicht JS und daher haben Funktionen ihren eigenen Geltungsbereich.

        Sowenige globale Variablen wie möglich, nur so viele wie unbedingt nötig.

        Absolute Zustimmung.
        Auch sollten notwendige Variablen auch tatsächlich als Parameter an Funktionen übergeben werden und möglichst auf das global-Schlüsselwort verzichtet werden.

        Einen schönen Sonntag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        mathbr:del.icio.us/
        1. Hallo,

          Auch sollten notwendige Variablen auch tatsächlich als Parameter an Funktionen übergeben werden und möglichst auf das global-Schlüsselwort verzichtet werden.

          ... oder aber eine "Referenz" benutzt werden, damit man auch speicherplatzkritische Dinge noch sauber (universell) coden kann.

          LG
          Chris

        2. Hallo Ashura,

          Umsteiger auf PHP werden sich möglicherweise die Frage stellen:
          "Warum sind in PHP globale Variablen nicht global?"

          ich habe die Frage ganz bewußt so formuliert. Sei es in C, sei es in Basic (ja und sei es in Javascript): Auf globale Variablen kann man global zugreifen, sie stehen überall (eben global) zur Verfügung: ob dies im Scope eines Moduls oder im Scope einer Funktion oder im Scope eines Blockes ist. Eine Einschränkung gibt es, wie Martin bereits erwähnt hat, wenn die globale Variable im untergeordneten Scope durch eine lokale Variable gleichen Namens überdeckt wird.

          Antwort: sie sind es. Damit gelten sie aber auch nur im globalen Geltungsbereich (=Scope).

          Das ist ja gerade die Problematik, vor der die Umsteiger stehen, dass der globale Geltungsbereich eben _nicht_ global ist, sondern eingeschränkt :-)

          Freundliche Grüße

          Vinzenz

      2. Hallo Vinzenz,

        Umsteiger auf PHP werden sich möglicherweise die Frage stellen:
        "Warum sind in PHP globale Variablen nicht global?"

        guter Hinweis. Da ich selbst erst neulich darüber gestolpert bin, möchte ich hier nochmal betonen: Das ist eine ungewöhnliche Eigenheit von PHP.
        In den meisten klassischen Programmiersprachen heißt global nämlich, dass die entsprechenden Variablen auch in allen untergeordneten Scopes verfügbar und gültig sind, sofern sie nicht durch gleichnamige lokale Variablen (oder Übergabeparameter, was meistens dasselbe ist) verdeckt werden.

        Sowenige globale Variablen wie möglich, nur so viele wie unbedingt nötig.

        Full ACK!

        Schönen Abend noch,
         Martin

        --
        Was ist wichtiger: Die Sonne oder der Mond?
        Der Mond. Denn er scheint nachts. Die Sonne dagegen scheint tagsüber, wenn es sowieso hell ist.
  2. Hallo Michael,

    kann mir jemand sagen, warum das nicht funktioniert?

    Weil die Variable $array innerhalb der Funktion nicht definiert ist. Lies mal die Dokuseite zum Geltungsbereich von Variablen.

    Grüße aus Nürnberg
    Tobias