RuD: function als array ??

Hi,

man kann ja ner Funktion nen Wert 'zuweisen', oder vielmehr sie errechnet den Wert selbst. $erg=plus(2)

Geht das auch das man nicht einen Wert, sonder ein array zurueckkriegt?

also $erg=plus(3)[2] usw. ihr wisst wie ichs mein

RuD

  1. Hello,

    Geht das auch das man nicht einen Wert, sonder ein array zurueckkriegt?

    In PHP geht das.

    <?php   ### return_array.php ###

    function make_list_array($start, $stop)
      {
        $_ret = array();

    for( $i=$start, $i<=$stop, $i++)
        {
          $_ret[$i] = chr(64 + $i);
        }

    return $_ret;
      }

    echo "<pre>\n";
      echo print_r(make_list_array(1,26));
      echo "</re>\n";

    ?>

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hallo!

      Hello,

      Geht das auch das man nicht einen Wert, sonder ein array zurueckkriegt?

      In PHP geht das.

      Ja, man kann ein array zurückgeben. Was aber RuD meinte (zumindest habs ich so verstanden), war, dass er direkt auf ein bestimmtes Element des zurückgegebenen Arrays zugreifen will.

      Ein Beispiel das in PHP zu einem Parser Error führt:

        
      <?php  
        
      echo (test())[2];  
        
      function test(){  
       return array(1,2,3);  
      }  
      ?>  
      
      

      In anderen Programmiersprachen funktioniert so ein Konstrukt.
      Warum das in PHP nicht geht, würde ich aber auch gerne wissen.

      mfg
        frafu

      1. Hello,

        <?php

        echo (test())[2];

        function test(){
        return array(1,2,3);
        }
        ?>

        Da hast Du recht, das geht so nicht.

        Aber man die Funktion etwas umbauen, oder sich eine Hüllfunktion dafür bauen, dann geht es doch:

        <?php   ### return_array.php ###

        function make_list_array($start, $stop, $index)
          {
            $_ret = array();

        for( $i=$start, $i<=$stop, $i++)
            {
              $_ret[$i] = chr(64 + $i);
            }

        if (isset($_ret[$index]))
            {
              return $_ret[$index];
            }
            else
            {
              return false;
            }
          }

        echo "<pre>\n";
          echo print_r(make_list_array(1,26,13));
          echo "</pre>\n";

        ?>

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Hallo!

          Da hast Du recht, das geht so nicht.

          Aber man die Funktion etwas umbauen, oder sich eine Hüllfunktion dafür bauen, dann geht es doch:

          Es gibt viele Möglichkeiten Unzulänglichkeiten auszubügeln.
          Einfacher wirds sein einfach eine Hilfvariable zu verwenden.

            
          funtion test(){  
             return array(1,2,3);  
          }  
          $tmp=test();  
          echo $tmp[2];  
          
          

          Trotzdem würde mich interessieren, ob es eine Erklärung gibt, warum das in PHP nicht funktioniert?

          mfg
            frafu

          1. Hallo FraFu.

            Trotzdem würde mich interessieren, ob es eine Erklärung gibt, warum das in PHP nicht funktioniert?

            Vielleicht weil PHP erst einmal den Ausdruck bzw. den Rückgabewert von Funktionen auswerten muss, bevor es darauf zurückgreifen kann?
            (AFAIR arbeitet PHP von rechts nach links, trifft es auf einen Index, welcher keiner Variable zugeordnet wurde, weiß es damit nichts anzufangen.)

            Einen schönen Freitag noch.

            Gruß, Ashura

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            mathbr:del.icio.us/ mathbr:w00t/
          2. echo $begrüßung;

            Es gibt viele Möglichkeiten Unzulänglichkeiten auszubügeln.
            $tmp=test();
            echo $tmp[2];

            Eine weitere wäre die Verwendung von list()

            list(,$var) = test();

            Trotzdem würde mich interessieren, ob es eine Erklärung gibt, warum das in PHP nicht funktioniert?

            Es funktioniert nicht, weil es keiner implementiert hat. Ich bin mir sicher, dass einer der PHP-Entwickler die Gründe dafür auf eine solche Frage hin schon einmal genannt hat. Und ein Vergleich mit anderen Programmiersprachen bringt auch niemanden weiter. :-)

            Für PHP6 stehen einige Änderungen ins Haus, diese Syntax gehört aber nicht dazu.

            echo "$verabschiedung $name";

            1. Hello,

              Es funktioniert nicht, weil es keiner implementiert hat. Ich bin mir sicher, dass einer der PHP-Entwickler die Gründe dafür auf eine solche Frage hin schon einmal genannt hat. Und ein Vergleich mit anderen Programmiersprachen bringt auch niemanden weiter. :-)

              Es ist eigentlich auch nur bei den fertigen Funktionen schade, dasss es nicht geht. Z.B. ein explode()[13] würde schon Sinn haben. Für alle anderen Fälle wäre es schließlich nur Speicherplatzverschwendung. Da wäre es dann doch besser, das zusätzliche (optionale) Funktionsargument für den Index einzuführen.

              Harzliche Grüße vom Berg
              http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau

  2. Hallo!

    Hi,

    man kann ja ner Funktion nen Wert 'zuweisen',
    oder vielmehr sie errechnet den Wert selbst. $erg=plus(2)

    Nein. Du kannst den Rückgabewert einer Funktion einer Variablen zuweisen. Einer Funktion kannst du einen Wert nur übergeben.

    Geht das auch das man nicht einen Wert, sonder ein array zurueckkriegt?
    also $erg=plus(3)[2] usw. ihr wisst wie ichs mein

    Das funktioniert leider nicht. Warum das in PHP nicht geht, weiß ich aber auch nicht.
    In anderen Programmiersprachen geht das ohne Probleme.

    mfg
      frafu