Mi się wydaje, że OP chce zrobić coś, co w Pythonie nazywa się **kwargs
. W PHP nie bardzo da się to osiągnąć. Jak zrobisz $a = 5
, to funkcja nie ma pojęcia, że pierwszy argument to a
. Wyrażenie $a = 5
zwraca 5, więc:
Kopiuj
foo($a = 5, $c = 20);
to jest to samo, co:
Z punktu widzenia funkcji foo
nie ma to znaczenia. Jedyne, co możesz zrobić, to coś takiego:
Kopiuj
function foo($a = null, $b = null, $c = null) {
if (is_array($a)) {
foreach ($a as $name => $value) {
$$name = $value;
}
}
var_dump($a, $b, $c);
};
foo(['a' => 5, 'c' => 15]);
foo(5, null, 15);
foo(5, 10, 15);
Osobiście myslę, że jest to fatalne rozwiązanie i jeżeli masz już taką sytuację, że nie chcesz przekazać jednego arugmentu to:
- Zmień ich kolejność. Pierwsze argumenty niech będą wymagane, opcjonalne na koniec.
- Jezeli masz taką funckję, to może ona za dużo robi? Może trzeba podzielić ją na dwie mniejsze, z których każda robi jedną rzecz?
- Błagam Cię nie używaj tego kodu, który Ci wyżej podałem. Napisałem go tylko w celach edukacyjnych :D
if-ach
, example:if($dane = preg_match("/(.*)/i",$string)) {