Dieter: Unterschied global setzen, Parameter übergeben

Hallo

ich habe eine Frage zu PHP bzw. Programmiertechnik im Allgemeinen.
Und zwar mal folgendes angenommen:

<?php
$monster_array_mit_viel_inhalt=array('a','b'...'z');

1 . Variante

function tu_dies_und_das()
{
 global $monster_array_mit_viel_inhalt;
 ... hier wird es getan ....
}

tu_dies_und_das();

oder 2. Variante

function tu_dieses_und_jenes($array)
{
 ... hier wird es getan ....
 return $array;
}

$monster_array_mit_viel_inhalt=tu_dieses_und_jenes($monster_array_mit_viel_inhalt);
?>

###############
abgesehen davon das Version 1. übersichtlicher und Version 2. universeller ist, würde es mich interessieren ob es da z.B. Performance-Unterschiede  gibt.
Ich habe zwar so ziemlich wenig Ahnung wie das PHP-intern behandelt wird, aber ich vermute das in beiden Fällen nur ein Zeiger auf eine Speicheradresse gesetzt, bzw. übergeben wird.
Demnach wäre es also wurscht.

Liege ich da ungefähr richtig?

Viele Grüße

Euer Dieter

  1. Hoi,

    1 . Variante

    function tu_dies_und_das()
    {
    global $monster_array_mit_viel_inhalt;
    ... hier wird es getan ....
    }

    Pfui!

    oder 2. Variante

    function tu_dieses_und_jenes($array)
    {
    ... hier wird es getan ....
    return $array;
    }

    besser

    abgesehen davon das Version 1. übersichtlicher

    Das ist nun Ansichtssache.

    und Version 2. universeller ist, würde es mich interessieren ob
    es da z.B. Performance-Unterschiede  gibt.

    Natuerlich gibt es da Unterschiede. Bei V. 2 muss er eine Kopie des
    Arrays anlegen und die dann zurueck geben.

    Liege ich da ungefähr richtig?

    Nein :-)
    Ansonsten vielleicht eher ein 'return &$array'.

    Gruessse,
     CK

    1. Hallo CK

      also wenn ich das Array per Referenz übergebe wäre es besser, aber immer noch nicht so gut wie es per global direkt zu bearbeiten?

      oder 2.b) Variante

      function tu_dieses_und_jenes(&$array)
      {
      ... hier wird es getan ....
      $array=$ergebnis;
      }

      Viele Grüße

      Dieter

      1. Hoi,

        also wenn ich das Array per Referenz übergebe wäre es besser, aber
        immer noch nicht so gut wie es per global direkt zu bearbeiten?

        Bei Referenzen ist da kein spuerbarer Unterschied (liegt an der Art,
        wie Referenzen funktionieren).

        oder 2.b) Variante

        function tu_dieses_und_jenes(&$array)
        {
        ... hier wird es getan ....
        $array=$ergebnis;
        }

        Ja, z. B.

        Gruesse,
         CK

        1. Hoi,

          function tu_dieses_und_jenes(&$array)
          {
          ... hier wird es getan ....
          $array=$ergebnis;
          }

          Habe ich ganz uebersehen, das mit der Referenz bringt nur was, wenn
          du auch *nur* mit der Referenz arbeitest.

          Gruesse,
           CK

          1. Hallo CK

            Habe ich ganz uebersehen, das mit der Referenz bringt nur was, wenn
            du auch *nur* mit der Referenz arbeitest.

            Oh ja, also

            Version 2.b)

            function tu_dieses_und_jenes(&$array)
            {
            ... hier wird es getan ....
            z.B. $array[$counter]=$ergebnis; # etc.
            }

            Vielen Dank für Deine Hilfe

            Dieter

            btw.

            ich wollte mal auf www.wwwtech.de gucken, ist aber "verboten".
            Das ist wohl nur für die eMail?

            1. Hoi,

              ich wollte mal auf www.wwwtech.de gucken, ist aber "verboten".
              Das ist wohl nur für die eMail?

              Im Moment ja. Mir fehlt im Moment einfach die Zeit, mich darum zu
              kuemmern.

              Gruesse,
               CK

        2. Hi,

          Bei Referenzen ist da kein spuerbarer Unterschied (liegt an der Art,
          wie Referenzen funktionieren).

          eigentlich sind Referenzen sogar idr.  langsamer als wenn man per Wert uebergibt (ausser es handelt sich um einige MB an Daten, aber sowas macht ausser Ulf wohl niemand).
          Referenzen sind nur fuer den gebrauch mit Objekten sinnvoll, daher wird sich das mit der ZendEngine2 (PHP5) auch aendern, dass mit new CLASS eine Kopie erzeugt wird.

          Jan
          --