PHP

Von: , 15.12.2009 19:05 Uhr

Hey PHP Programmierer,

ich brauche dringend Rat von dir.

Und zwar habe ich eine function nennen wir sie test().

In dieser func. gibt es zwei params die default Werte besitzen:

test($pfad = "/dir/dir/, $param = "string")

Ich will wenn ich die test() aufrufe nur dem 2. parameter einem wert zuweisen, der 1. soll den standart wert nehmen.
Das problem ist das bei test('', "andererString") der $pfad leer ist, gibt es eine möglichkeit der funktion das zu sagen ohne auf einen leeren string zu überprüfen?

Vielen Dank für deine Hilfe

Gruß Head

11 Antworten zu dieser Frage

  1. Antwort von nach 23 Minuten 0 hilfreich
    Re: PHP

    Hallo Head,

    es gibt mehrere Möglichkeiten dies über einen Umweg zu realisieren.
    Zuerst könntest du versuchen statt einem leeren String einfach (ohne Anführungszeichen!) null zu übergeben.
    Wenn das nicht hilft, dann kannst du die Reihenfolge der Parameter einfach umdrehen, so dass du einfach test("andererString") aufrufst.

    Oder du prüfst in der Funktion direkt am Anfang if(empty($pfad)) { $pad = "/dir/dir/";} und dann kommt der Rest der Funktion.

    Ich hoffe, ich konnte dir bei deinem Problem helfen.

    Gruß
    taaz

    • Antwort von nach 34 Minuten 0 hilfreich
      Re^2: PHP

      Vielen Dank für die schnelle Antwort.
      Wenn ich null versuche gibt er mit trotzdem "" aus.
      Die Möglichkeit das zu verdrehen ist klever, daran habe ich nicht gedacht, aber mein Problem wäre nicht gelöst wenn es mehrer parameter gebe.

      Und die Abrage wollte ich vermeiden, da ich gerne wüsste ob es auch mit einer anderen Möglichkeit geht

      Gruß Head

      • Antwort von nach einer Stunde 0 hilfreich
        Re^3: PHP

        Hallo Head,

        ok, das mit null war nur so eine schnelle Idee.
        Außer dem Vertauschen von Parametern und der nachträglichen Abfrage fallen mir keine Möglichkeiten ein.

        Ich finde es allerdings nicht zu aufwändig, das über den Umweg der zweiten Abfrage zu machen, wenn es mehrere Parameter gibt.

        Evtl. kannst du noch andere hier Fragen, falls du dich damit nichz zufrieden geben möchtest ;)

        Falls du eine Möglichkeit findest, die deinen Vorstellungen entspricht, würde ich mich freuen, wenn du mir die auch mitteilen würdest, da ich hin und wieder schon über dieses Problem nachgedacht habe ;)

        Gruß
        Timo

        • Antwort von nach 45 Minuten 0 hilfreich
          Re: PHP

          Hallo Head

          Du musst den ersten Parameter als "null"-Wert übergeben:

          test(null, "zweiter Parameter");



          Gruss tschuegge

    • Antwort von nach 50 Minuten 0 hilfreich
      Re^2: PHP

      Hallo tschuegge,

      danke für die Antwort.
      leider gibt mir die Funktion null zurück wenn ich null als Parameter angebe:

      test($test = "Hallo")
      {
      var_ump($test);
      }

      test(null);

      die funktion gibt "null" zurück, sollte aber nach deiner Aussage "Hallo" zurückgeben.

      Gruß Sanny

  2. Antwort von nach 56 Minuten 0 hilfreich
    Re^3: PHP

    Sorry, da habe ich mich geirrt. Es werden wirklich keine Default-Werte von
    Parametern geladen, wenn der Parameter angegeben wird! Ich habe jede
    erdenkliche Möglichkeit ausprobiert und es funktioniert keine. Möglicherweise, da
    PHP intern die Anzahl übergebener Parameter abfragt und anschliessen die
    fehlenden Parameter mit den Default-Werten auffüllt.

    Hier ein Codebeispiel wie das Problem laut PHP-Dokumentation gelöst werden
    kann:

    function some_function($v1='value1',$v2='value2',$v3='value3'){
    var_dump(is_null($v1)?'value1':$v1);
    var_dump(is_null($v2)?'value2':$v2);
    var_dump(is_null($v3)?'value3':$v3);;
    }
    


    Anscheinend gibt es keine "schönere Lösung".

    Gruss tschügge

  3. Antwort von nach 4 Stunden 0 hilfreich
    Re: PHP

    Hi Head,

    das ist leider so nicht möglich. Was du natürlich machen kannst, ist einfach auch wieder den default-Wert zu übergeben (test("dir/dir", "test); o.Ä.).
    Bei der Gestaltung solcher Funktionen empfiehlt es sich grundsätzlich immer, die Reihenfolge der Paramter so zu wählen, dass man möglichst selten den Default-Paramter übergeben muss. In deinem Fall hieße das, die Reihenfolge der Parameter zu vertauschen, falls du normalerweise den jetzigen ersten Parameter mit Default-Wert ansprichst, den zweiten jedoch nicht.

    Zur Vereinfachung könntest du an dieser Stelle mit einer Konstanten arbeiten:
    define("DEF_VAL", "/dir/dir/");
    function test($pfad = DEF_VAL, $param = "string")
    {
    // Mach was
    }

    test(DEF_VAL, "test);

    Damit ersparst du dir den eventuell sehr lang geratenen ersten Paramater dauernd neu tippen zu müssen.

    Ich hoffe, damit wenigstens ein wenig helfen zu können, auch wenn die Antwort "geht nicht" meist nicht so befriedigend ist.

    Beste Grüße,

    Björn

    • Antwort von nach 13 Stunden 0 hilfreich
      Re^2: PHP

      Danke Björn für deine Antwort.
      Du bestätigst damit das es leider keine andere Möglichkeit gibt mit Define oder einer kurzen if-Abfrage zu arbeiten.

      Dein Tipp würde mir an der Stelle helfen, danke dir.

      Gruß Head

  4. Antwort von - abgemeldetes Mitglied - nach 13 Stunden 0 hilfreich
    Re: PHP

    Hallo Head,

    Grundsätzlich funcktioniert das leider nicht. In der PHP-Hilfe steht:
    "Bitte beachten Sie, dass alle Vorgabewerte rechts von den Nicht-Vorgabeparametern stehen sollten; - sonst wird es nicht funktionieren."

    Einen Workaround gibt es allerdings. Versuche, die Funktion mal so zu schreiben:

    <code>
    function test($pfad=null, $param=null) {
    if (is_null($pfad)) {
    $pfad="/dir/dir/";
    }
    if (is_null($param)) {
    $param="string";
    }
    ...
    }
    </code>

    Somit kannst du folgende Funktionsaufrufe verwenden:
    test();
    test('eins');
    test(null, 'zwei');
    test('eins', 'zwei');

    lg,
    Michael

  5. Antwort von nach 15 Stunden 0 hilfreich
    Re: PHP

    Nein, ich denke nicht, dass das geht. Drehe doch einfach die Parameter herum?

  6. Antwort von nach 16 Stunden 0 hilfreich
    Re: PHP

    Hallo Head,

    da ist mir keine Lösung bekannt. Ich würde es folgendermaßen machen:

    function test ($a,$b) {
    if ($a == null) $a = "text";
    if ($b == null) $b = "bla";
    }

    Hat es einen bestimmten Grund, warum du keine if-Abfrage willst?

    Grüße MD

    Jetzt auf diese Frage antworten.