[Funktion] optionale referenz-variabeln in funktionen

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

  • [Funktion] optionale referenz-variabeln in funktionen

    hi

    also der titel sagts ja schon fast
    ich habe die folgende funktion und möchte gerne, dass keine fehlermeldung kommt, wenn der dritte parameter fehlt.
    das problem: wenn ich &$strtype=false schreibe (wie beim 2ten parameter) sagt er parse error, unexpected '=', expecting ')'

    hat hier jemand eine idee wie ich das problem lösen kann?
    PHP-Code:
    <?
      function vGET($str,$type=false,&$strtype) {
        // type {get | post | cookie | files | session}
        global $_GET, $_POST, $_COOKIE, $_FILES, $_SESSION;
        $_strings     = array('get'=>$_GET,'post'=>$_POST,'cookie'=>$_COOKIE,'files'=>$_FILES,'session'=>$_SESSION);
        foreach($_strings as $key=>$value) {
          if((!$type || $type==$key) && isset($value[$str])) {
            global ${$str};
            $v        = $value[$str];
            if(is_array($v)) {
              ${$str} = $v;
              $strtype    = 'array';
            } elseif(is_scalar($v)) {
              if(is_numeric($v)) {
                ${$str}   = (float) $v;
                $strtype  = 'float';
              }
              else {
                ${$str}   = stripslashes($v);
                $strtype  = 'string';
              }
            }
            elseif(is_null($v))
              ${$str} = NULL;
            return ${$str};
          }
        }
        return false;
      }
    ?>

    2.te frage:
    gibt es eine funktion, die mir den namen des types einer variabel (als string) zurückgibt?
    also ne abkürzung für:
    $type = '';
    if(is_string($foo))
    $type = 'string';
    elseif(is_bool($foo))
    $type = 'bool';
    ...usw...

    danke fürs helfen

    gruss
    jone

  • #2
    1.
    du hast referenzvariablen, weil du in der funktion den wert der variablen im hauptprogramm ändern willst, wenn du nichts angibst, was bitte willst du ändern?
    wenn du nichts ändern willst, dann brauchst du keine referenz

    2.
    gettype
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      1. ich brauche den 3ten parameter nicht immer, je nach anwendung.
      das problem hab ich behoben, war eigentlich nur ein denkfehler, denn ich kann das ja im hauptscript machen. ...

      mich würde aber trotzdem noch interessieren, ob das möglich ist. bei diversen "standard"-funktionen gibt es ja optionale referenz-variabeln (oder wie man die auch immer nennt)..
      z.b. fsockopen(), wenn ich mich nicht täusche. dort kann man doch optional variabeln angeben (errno & errstr), in die dann gegebenfalls eine fehlermeldung ausgegeben wird.
      kann man das auch in eigenen funktionen machen, dass das optional ist?


      2.
      danke, ist genau das was ich suchte..

      thx

      Kommentar


      • #4
        hi

        also ich weiss leider immer noch nicht was du meinst ...
        es sei denn du meinst das, was du auch bei deinem
        zweitem parameter gemacht
        hast
        $var = 'blabla'

        so schrieb ich zumindestens immer meine optionalen parameter in die funktion ....

        gruss
        iglo

        Kommentar


        • #5
          ja, schon das, aber das problem ist, dass das eine referenz variabel ist.

          meine frage ist eigentlich ganz simpel:
          kann man übergebene referenz variabel auch optional verwenden (bei funktionen)?
          (ich weiss, unkorrekt formuliert, aber wusste nicht wie besser formulieren)...

          Kommentar


          • #6
            bei fsockopen übergibst du, wenn ich mich recht erinnere, die variablen, in denen du ergebnisse haben willst, mit explizit vorangestelltem referenzoperator &

            PHP-Code:
            function dummy_1(&$var) {
                
            $var 5;
            }

            function 
            dummy_2($var) {
                
            $var 7;
            }

            $myvar 10;
            echo 
            $myvar.'<br />';

            dummy_1($myvar);
            echo 
            $myvar.'<br />';

            dummy_2($myvar);
            echo 
            $myvar.'<br />';

            dummy_2(&$myvar);
            echo 
            $myvar
            unterschied klar?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              jo, danke, jetzt hab ichs gepeilt

              also zusammengefasst würde man das problem in dem stil lösen:
              PHP-Code:
                function dummy($var=false) {
                  if(
              $var)
                    
              $var++;
                }
                 
                
              $a 1;
                
              dummy(&$a); // $a wird 2

                
              $a 1;
                
              dummy(); // $a bleibt 1, aber keine fehlermeldung 
              ^^ thx
              gruss jone

              Kommentar

              Lädt...
              X