2016-12-22 6 views
0

Ich habe eine FunktionGibt es eine Möglichkeit, nur einige optionale Funktionsargumente anzugeben?

public function test($arg1, $arg2 = "a", $arg3 = "b")

Gibt es eine Möglichkeit, es nur $arg1 und $arg3 Angabe rufen $arg2 mit Standardwert zu verlassen?

+0

Nein, es ist nicht. Um '$ arg3' zu übergeben, müssen Sie auch' $ arg2' übergeben, aber Sie könnten einfach den Standardwert von '$ arg2' übergeben. 'test ('Hallo', 'a', 'Welt');' –

+1

außer ein Trick mit 'func_get_args()' oder mit einem benannten Array als Parameter? Nein. optionale Argumente * müssen * nach dem letzten obligatorischen Argument stehen. (vielleicht gibt es etwas in php7, aber ich bin mir nicht sicher) –

+1

Ich würde normalerweise 'testen ('Hallo', Null, 'Welt!');' und das gilt auch für andere Sprachen ... Vielleicht können Sie einen Test machen um zu sehen, ob '$ arg2' null ist und basierend darauf der Wert" default ". –

Antwort

0
+0

Ich denke, die Hauptidee mit optionalen Argumente ist, dass es Situationen gibt, in denen Sie sie verwenden möchten. Wenn Sie _never_ das zweite Argument senden, dann wird Ihre Lösung machen Sinn. –

2
function test($arg1, $arg2 = "a", $arg3 = "b") { 
    if (is_null($arg2)) $arg2 = "a"; 
    return $arg1.' '.$arg2.' '.$arg3; 
} 

echo test(1, null, 3); 

Ausgang zu verwenden:

1 a 3 

Wird dies auch, dass in JavaScript weisen darauf hin, ist durchaus üblich:

function test (input, callback) { 
    $.post("example.com/endpoint", input, function(err, data) { 
    if (error || response.statusCode !== 200) { 
     callback(true, response) 
    } 
    callback(null, data) 
    }) 
} 

test({ 
    'id': 1, 
    'name': 'Mary' 
}, function (err, data) { 
    if (err) { 
    console.log.error('Error!!') 
    console.log(data) 
    } 
    console.log.info(data) 
}) 
+0

Das funktioniert nur, wenn er Zugriff auf die Funktion hat und diese ändern kann (was wir nicht wirklich wissen) und wenn 'null' kein gültiger Wert für' $ arg2' ist. –

+0

@MagnusEriksson Richtig, das hängt vom Anwendungsfall ab, kann aber funktionieren. –

+0

Ja. Ich wollte nur darauf hinweisen. :) –

0

können Sie Funktion wie diese currying verwenden: Bezieht sich diese post

function foo($x, $y, $z) { 
    echo "$x - $y - $z"; 
} 

$bar = function($z) { 
    foo('A', 'B', $z); 
}; 

$bar('C'); 

auch:

function foo($x, $y, $z) { 
    echo "$x - $y - $z"; 
} 

function fnFoo($x, $y) { 
    return function($z) use($x,$y) { 
    foo($x, $y, $z); 
    }; 
} 

$bar = fnFoo('A', 'B'); 
$bar('C'); 
Verwandte Themen