MB: probleme bei func_get_args

moin community,

Ich hab in eine Funktion zwei strings foo und bar übergeben und hab das einemal mit var_dump( $array ) und einmal mit print_r( $array ) über func_get_args() ausgegeben. also $array = func_get_args() in der Funktion. Ich wollte sichergehen, das ich da keinen fehler bei der ausgabe gemacht habe.

Array ( [0] => Array ( [0] => foo [1] => bar ) )
array(1) { [0]=> array(2) { [0]=> string(2) "foo" [1]=> string(3) "bar" } } 

warum kommt da n multiples array raus und kann man das beheben??? Ich will mit $array[ 'foo' ] arbeiten und nich mit $array[ 0 ][ 'foo' ].

ich hab in php.net und generell in google nachgeschaut aber ich hab nix gefunden :/.

vlg MB

  1. Hallo und guten Abend,

    array(1) { [0]=> array(2) { [0]=> string(2) "foo" [1]=> string(3) "bar" } } 
    

    Das ist jetzt aber gefälscht, oder?

    Grüße
    TS

    --
    es wachse der Freifunk
    http://freifunk-oberharz.de
  2. Tach!

    Ich hab in eine Funktion zwei strings foo und bar übergeben und hab das einemal mit var_dump( $array ) und einmal mit print_r( $array ) über func_get_args() ausgegeben. also $array = func_get_args() in der Funktion.

    Array ( [0] => Array ( [0] => foo [1] => bar ) )
    array(1) { [0]=> array(2) { [0]=> string(2) "foo" [1]=> string(3) "bar" } } 
    

    Kannst du da ein <pre> davorsetzen, damit das ordentlich formatiert angezeigt wird?

    Anscheinend hast du da was falsch gemacht. Ich kann das jedenfalls nicht anhand deiner Beschreibung nachvollziehen. Code zeigst du ja keinen.

    warum kommt da n multiples array raus und kann man das beheben???

    Weil du Arrays übergeben hast. Und ja, kann man beheben. Mach es einfach richtig.

    dedlfix.

  3. ich hab diese Funktion in verschachtelten functionen aufgerufen. wahrscheinlich kommt dieses multiuple array daher.

    class args {
    
        static function bar() {
          $args = func_get_args();
          print_r( $args );
        }
    
        static function foo() {
          self::bar( func_get_args() );
        }
    }
    
    args::foo( 'a', 'b' );
    

    herzlichen dank für den denk anstoß :-)

    vlg MB

    1. Ja ist klar, du reichst das Array aus func_get_args() aus foo() als 1. Parameter an bar() weiter, da muss es ja ein Array im Array sein.

      Wenn Du die Parameterleiste von foo() 1:1 an bar() weiterreichen willst, wirst Du es indirekt tun müssen, mit

         call_user_func_array('self::bar', func_get_args());
      

      arbeiten müssen (Callable als 'class::method' für statische Methoden ab PHP 5.2.3 verfügbar).

      Rolf

      1.    call_user_func_array('self::bar', func_get_args());
        

        PHP 5.6 hat außerdem einen spread-Operator, womit man die obere Zeile leserlicher schreiben kann:

           self::bar(...func_get_args());
        

        In Kombination mit dem rest-Operator für variadische Funktionen kann man MBs Problem-Programm sehr einfach lösen:

        class args {
            static function bar(...$args) {
              print_r($args);
            }
            static function foo(...$args) {
              self::bar($args); // $args in bar = [['a','b']]
              self::bar(...$args); // $args in bar = ['a','b']
            }
        }
        
        args::foo('a', 'b');
        
        1. Wieder was gelernt. In dem PHP Projekt, das ich betreue, steckte ich lange bei PHP 5.3 fest und mein Hoster stellt erst jetzt auf 5.6 um (von 7 reden wir mal gar nicht). Den kann ich prima brauchen.

          Danke
          Rolf