Jak wspomniano powyżej, nie będzie można pominąć parametrów. Napisałem tę odpowiedź, aby zapewnić dodatek, który był zbyt duży, aby umieścić go w komentarzu.
@Frank Nocke proponuje wywołanie funkcji z jej domyślnymi parametrami, czyli na przykład posiadanie
function a($b=0, $c=NULL, $d=''){
powinieneś użyć
$var = a(0, NULL, 'ddd');
co funkcjonalnie będzie takie samo, jak pominięcie pierwszych dwóch ( $b
i $c
) parametrów.
Nie jest jasne, które z nich są wartościami domyślnymi ( 0
wpisano, aby zapewnić wartość domyślną, czy jest to ważne?).
Istnieje również niebezpieczeństwo, że problem z wartościami domyślnymi jest powiązany z funkcją zewnętrzną (lub wbudowaną), gdy wartości domyślne mogą być zmieniane przez autora funkcji (lub metody). Więc jeśli nie zmieniasz swojego wywołania w programie, możesz nieumyślnie zmienić jego zachowanie.
Pewnym obejściem może być zdefiniowanie pewnych stałych globalnych, na przykład DEFAULT_A_B
„domyślnej wartości parametru B funkcji A” i parametrów „pomiń” w ten sposób:
$var = a(DEFAULT_A_B, DEFAULT_A_C, 'ddd');
W przypadku klas łatwiej i bardziej elegancko jest zdefiniować stałe klasowe, ponieważ są one częścią zasięgu globalnego, np.
class MyObjectClass {
const DEFAULT_A_B = 0;
function a($b = self::DEFAULT_A_B){
}
}
$obj = new MyObjectClass();
$var = $obj->a(MyObjectClass::DEFAULT_A_B);
Zauważ, że ta domyślna stała jest definiowana dokładnie raz w całym kodzie (nie ma wartości nawet w deklaracji metody), więc w przypadku pewnych nieoczekiwanych zmian, zawsze będziesz podawać funkcję / metodę z poprawną wartością domyślną.
Klarowność tego rozwiązania jest oczywiście lepsze niż dostarczanie surowych wartości domyślnych (jak NULL
, 0
itd.), Które nie mówią nic do czytnika.
(Zgadzam się, że dzwonienie podoba $var = a(,,'ddd');
byłoby najlepszą opcją)