Ankündigung

Einklappen
Keine Ankündigung bisher.

Parameter einer Funktion direkt in Array der Funktion?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Parameter einer Funktion direkt in Array der Funktion?

    Ich arbeite ganz gerne mit Arrays und habe daher oft übergebene Parameter einer Funktion in ein Array zuzuweisen.

    Leider habe ich noch keinen Trick gefunden, dieses direkt und ohne zwischenvariable zu tun.

    Folgender Code kann das verdeutlichen:

    PHP-Code:


    function a$box="A"$fachnummer=1$leeren=true)
    {
      
    $af['i']['box'] = $box;
      
    $af['i']['fach_no'] = $fachnummer;
      
    $af['i']['leeren'] = $leeren;




    Gibt es irgend eine chance, die arrayelemente direkt in der "Funktionszeile" zu befüllen statt über den Umweg der (zusätzlichen) variablen zu gehen?

    Danke
    jwka

  • #2
    keine Ahnung ob es das ist was du suchst, aber schau dir mal [MAN]func_get_args[/MAN]() an. Wieso lässt du nicht einfach das Array als Parameter übergeben?

    Kommentar


    • #3
      Eine Funktion ist natürlich ein isolierter Bereich, Du kannst aber auch global verwenden

      Kommentar


      • #4
        Du könntest das ganze natürlich auch mittels array() schreiben:
        PHP-Code:
        $af['i'] = array( 'box' => $box,
                              
        'fach_no' => $fachnummer,
                              
        'leeren' => $leeren); 

        Kommentar


        • #5
          Meinst du es vielleicht so?
          PHP-Code:
          function a$value )
          {
            
          $af['i'] = $value;

            return 
          $af;
          }

          /* Aufruf */
          a( array("box" => "a""fachnummer" => 1"leeren" => true) ); 

          Kommentar


          • #6
            Ich wollte diesen Thread nochmals hoch holen, weil ich immer mal wieder auf der Suche nach der Lösung für dieses Thema bin.

            Mein Wunsch (der nicht geht):

            PHP-Code:
            function a$arr['foo']="bar"$arr['bar']="foo" )
            {
                <
            code>

            }; 
            heute mache ich das so:

            PHP-Code:
            function a$a="bar"$b="foo" )
            {
                
            $arr['foo']=$a;
                
            $arr['bar']=$b;
                <
            code>

            }; 

            @all
            Ich will mir kein Array übergeben lassen, weil:

            - die Werte einerseits in Variablen zur Verfügung stehen und von unterschiedlichen Seiten generiert werden,

            - zweitens ist natürlich die $x="y" Notation eine schöne Möglichkeit, Defaultwerte vorzugeben.

            - drittens soll die Funktion einen ähnlichen Aufruf-Charakter haben wie andere Funktioen, die in diesem Fall alle mit Variablen statt Arrays aufgerufen werden.

            jwka

            Kommentar


            • #7
              Zitat von jwka61 Beitrag anzeigen
              Leider habe ich noch keinen Trick gefunden, dieses direkt und ohne zwischenvariable zu tun.
              Den gibt es auch nicht. Du kannst die Zuweisung zum Array allenfalls mit [man]compact[/man] verkürzen, wenn das deinen Geschmack trifft. Ansonsten kannst du die Suche nach über einem Jahr langsam aufgeben, es geht hier ja nicht mal um funktionalen Mehrwert, nur ein syntaktisches Konstrukt, das du gerne hättest, PHP aber nunmal nicht kennt.

              Kommentar


              • #8
                http://de.php.net/manual/de/function.compact.php

                PHP-Code:
                $foo 'blub';
                $bar 'test';
                $arr compact('foo''bar');
                var_dump($arr); 
                edit: zu langsam

                Kommentar


                • #9
                  'Tschuldigung ...

                  Es ist ja eigentlich sowas Triviales, dass ich's auch nach langer Zeit nicht so recht glauben wollte, dass es da nix gibt und ich das schlicht für ein Wissensloch meinerseits gehalten hab.

                  Und für "überflüssiges weil nur schön oder vereinfachend" gibts ja auch andernorts viele Beispiele ...

                  Aber gut. Ich geb' mich nun damit zufrieden ...

                  Danke trotzdem an alle.
                  jwka

                  p.s. Compact geht nicht mit Arrays, die numerische Indices haben sollen, oder?.

                  Kommentar


                  • #10
                    Nein, wie auch, dazu müssten die Variablen ja numerisch sein. Schonmal eine Variable $123 gesehen?

                    Kommentar


                    • #11
                      SO etwas kann es gar nicht geben, da übergebene Funktionsparameterwerte innerhalb der Funktion gar keinen Namen besitzen. Erst durch Angabe eines Parameters in der Parametersignatur wird ein übergebener Wert an ein Variable zugewiesen, deren Name sich nach den Parametersetting richtet.

                      Das geht soweit, dass sogar dieser Joke am Rande funktioniert:

                      PHP-Code:
                      function foo ($a $a) {
                        
                      // do smthing

                      Kommentar


                      • #12
                        Die andere Frage wäre auch wodurch wird dieses Array initialisiert dem du Werte zuweisen willst? Normal solltest du die Variable mit $arr = array(); initalisieren bevor du dann einzelne Schlüssel/Werte-Paare hinzufügst. Nach deinem System oben ist das aber gar nicht möglich, heißt da müsste impliziet dann das Arrray initialisiert werden ... nicht wirklich schön finde ich.

                        Kommentar


                        • #13
                          Das mit den stilistisch sauberen durchinitialisieren liesse sich jetzt aber auch auf die Variablen ausdehnen, gelle?

                          Und die werden von den allermeisten "ganz ohne murren" aus der function x( <argument> ) weiter verwendet.


                          jwka

                          Kommentar


                          • #14
                            Zitat von jwka61 Beitrag anzeigen
                            Das mit den stilistisch sauberen durchinitialisieren liesse sich jetzt aber auch auf die Variablen ausdehnen, gelle?
                            Nein, wie denn?

                            Kommentar


                            • #15
                              Wenn du in der Funktionssignatur "func($a = 'b')" hast ist das doch richtig initialisiert! $arr['a] = 'b' wäre aber nicht korrekt!

                              Kommentar

                              Lädt...
                              X