jens65m: Variablen in Funktionen

Hallo,

wie kann ich eine Variable nur dann in eine Funktion einbinden, wenn sie gesetzt ist?

function xyz ($var1, $nurwenngesetzt, $var2)  
{  
     //funktionsaufgaben  
}

Lg, Jens

  1. Hi,

    wie kann ich eine Variable nur dann in eine Funktion einbinden, wenn sie gesetzt ist?

    function xyz ($var1, $nurwenngesetzt, $var2)

    Das ist keine „Einbindung“, sondern die Deklaration von Parametern im Funktionskopf.

    Deine Fragestellung ist mal wieder ziemlich unspezifisch.
    Eventuell möchtest du dir im Manual anschauen, wie man optionale Funktionsparameter deklarieren kann.

    Beim Aufruf der Funktion muss eine Variable, die du als Parameter übergibst, aber „gesetzt“ sein, sonst gibt es eine Notice.

    Du kannst aber natürlich isset/empty beim Aufruf der Funktion einsetzen, und davon abhängig die Variable oder einen „leeren“ Wert übergeben, mit Hilfe des ternären Operators.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Hello Jens,

    wie kann ich eine Variable nur dann in eine Funktion einbinden, wenn sie gesetzt ist?

    function xyz ($var1, $nurwenngesetzt, $var2)

    {
         //funktionsaufgaben
    }

      
    So, wie Du das zeigst in deinem Beispiel, ist es nicht möglich, da so die Funktionsargumente an ihre Position gebunden sind. PHP gibt aber die Möglichkeit, Funktionsargumente bei der Deklaration der Funktion vorzubelegen. Allerdings ist es dann unpraktisch, wenn noch weitere Argumente folgen, die man ebenfalls benötigt. Man muss immer alle Funktionsargumente bis zum letzten benötigten (abweichend von der Vorbelegung) explizit übergeben beim Funktionsaufruf.  
      
    PHP ist aber eine Interpretersprache und daher lässt es, wie fast alle Interpretersprachen, auch die Übergabe von Werten per Namen, also nicht per Position zu. Hierzu kannst Du in PHP einfach ein Array benutzen.  
      
    Der Nachteil ist, dass man für das Setzen der Elemente im Array einen extra Verarbeitungsschritt benötigt, also nicht inline arbeiten kann.  
      
    Dies als Beispiel:  
      
    ~~~php
      
      
        $_argumente['name']='vom Berg';  
        $_argumente['vorname']='Tom';  
        $_argumente['alter']='geht gerade noch so';  
      
        function xyz ($_argumente)  
        {  
            if (!is_array($_argumente)) return false;  
      
            $ret = "<ul>\r\n";  
            foreach ($_argumente as $key => $val)  
            {  
                $ret .= "    <li><strong>" . htmlspecialchars(ucfirst($key)) .  
                            ": </strong>" . htmlspecialchars($val) .  
                            "</li>\r\n";  
            }  
            $ret .= "</ul>\r\n";  
      
            return $ret;  
        }  
      
        echo xyz($_argumente);  
      
    
    

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hi,

      Der Nachteil ist, dass man für das Setzen der Elemente im Array einen extra Verarbeitungsschritt benötigt, also nicht inline arbeiten kann.

      Was genau meinst du?

      echo xyz(array(...));

      Das „geht“.

      MfG ChrisB

      --
      RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      1. Hello,

        Der Nachteil ist, dass man für das Setzen der Elemente im Array einen extra Verarbeitungsschritt benötigt, also nicht inline arbeiten kann.

        Was genau meinst du?

        echo xyz(array(...));
        Das „geht“.

        Ja, Du hast Recht. So wird es zwar unhandlich, ist aber trotzdem noch inline möglich. Und man muss im (assoziativen) Array nur die Name/Index-Value-Paare angeben, die man innerhalb der Funktion auch verarbeiten will.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
    2. Hi!

      PHP ist aber eine Interpretersprache und daher lässt es, wie fast alle Interpretersprachen, auch die Übergabe von Werten per Namen, also nicht per Position zu. Hierzu kannst Du in PHP einfach ein Array benutzen.

      Ein Array vs. Funktionsparameter anhand ihres Namens zu übergeben sind aber zwei verschiedene Paar Schuhe. PHP kennt keine Übergabe per Namen. Python könnte genau das.

      Der Nachteil ist, dass man für das Setzen der Elemente im Array einen extra Verarbeitungsschritt benötigt, also nicht inline arbeiten kann.

      Wenn du Parameter in einem Array haben möchtest, dann erstell eine Funktion ohne Argumente. Man kann trotzdem welche übergeben, und sie dann mit func_*arg(s) erhalten.

      Lo!

      1. Hello,

        Wenn du Parameter in einem Array haben möchtest, dann erstell eine Funktion ohne Argumente. Man kann trotzdem welche übergeben, und sie dann mit func_*arg(s) erhalten.

        *äh*

        Das sind dann aber wieder Positionsparameter, also mit einer strengen Reihenfolge.

        Die Übergabe per (assoziativen) Array muss aber keine Reihenfolge beachten (Sonderfälle bitte mal außer Betracht), da die Elemente im Array per Namen identifiziert werden können.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hi!

          Wenn du Parameter in einem Array haben möchtest, dann erstell eine Funktion ohne Argumente. Man kann trotzdem welche übergeben, und sie dann mit func_*arg(s) erhalten.
          *äh*
          Das sind dann aber wieder Positionsparameter, also mit einer strengen Reihenfolge.

          Richtig. Bis jetzt ist ja nicht bekannt, wofür der OP das nun genau braucht, so dass ich mit meinen Vorschlägen nicht auf Pseudo-"benannte Parameter" festgelegt bin.

          Die Übergabe per (assoziativen) Array muss aber keine Reihenfolge beachten (Sonderfälle bitte mal außer Betracht), da die Elemente im Array per Namen identifiziert werden können.

          Falls man das braucht, ist die Übergabe eines Arrays eine Möglichkeit. Ein PHP-Standard-Objekt (oder auch eins einer definierten Klasse) lässt sich ebenfalls verwenden.

          Lo!