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?
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.
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
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':blush:v1);
var\_dump(is\_null($v2)?'value2':blush:v2);
var\_dump(is\_null($v3)?'value3':blush:v3);;
}
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
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.
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:
function test($pfad=null, $param=null) {
if (is_null($pfad)) {
$pfad="/dir/dir/";
}
if (is_null($param)) {
$param=„string“;
}
…
}
Somit kannst du folgende Funktionsaufrufe verwenden:
test();
test(‚eins‘);
test(null, ‚zwei‘);
test(‚eins‘, ‚zwei‘);
danke für deine Antwort.
Genau das wollte ich wissen ob es geht oder nicht. Eine Abfrage wollte ich dadurch vermeiden. Ansonsten hätte ich auch die Möglichkeit der if-kurz-schreibweise genutzt. Die Vorgabewerte rechts zu schreiben werde ich mir aber merken
einen bestimmten Grund gibt es nicht. Ich will lediglich, so wie jeder Programmierer, den Code möglichst ordentlich bzw. kurz halten.
Da ich mittlerweile erfahren habe, dass es keine andere Möglichkeit gibt als mit einer If-Abfrage, oder Konstanten zu arbeiten würde ich auch die kurzschreibweise empfehlen:
die schreibweise mag kompakter erscheinen, dennoch ist sie es nicht. Zum Einen musst du mehr Zeichen tippen und du bekommst jedes mal einen Umspeichervorgang, auch wenn er eigentlich nicht notwendig ist.
Des weiteren würde ich nicht auf leeren String prüfen, sondern auf null. Das spart Arbeitsspeicher, ist schneller und verlagert die Fehlerprüfung auf Übergabe eines korrekten Pfades weg von den Übergabeparametern zu dem Abschnitt im Code, wo es sinnvoll ist. Dadurch wird die Unterscheidung zwischen gewolltem Auslassen des Pfades und fehlerhafter Übergabe, also Fehler in vorangegangen Abschnitten, möglich.