Yukarıda bahsedildiği gibi, parametreleri atlayamazsınız. Bu yanıtı, bir yoruma yerleştirilemeyecek kadar büyük bir ek sağlamak için yazdım.
@Frank Nocke , işlevi varsayılan parametreleriyle çağırmayı önerir , bu nedenle örneğin
function a($b=0, $c=NULL, $d=''){
kullanmalısın
$var = a(0, NULL, 'ddd');
işlevsel olarak ilk iki ( $b
ve $c
) parametrenin çıkarılmasıyla aynı olacaktır .
Hangilerinin varsayılan olduğu açık değildir ( 0
varsayılan değeri sağlamak için mi yazılmıştır yoksa önemli mi?).
Varsayılan değerler işlev (veya yöntem) yazarı tarafından değiştirilebildiğinde, varsayılan değerler sorununun harici (veya yerleşik) işleve bağlı olma tehlikesi de vardır. Yani programdaki çağrınızı değiştirmezseniz, istemeden davranışını değiştirebilirsiniz.
Bazı geçici çözümler, DEFAULT_A_B
"A işlevinin B parametresinin varsayılan değeri" ve parametreleri bu şekilde "atla" gibi bazı genel sabitleri tanımlamak olabilir :
$var = a(DEFAULT_A_B, DEFAULT_A_C, 'ddd');
Sınıflar için, sınıf sabitlerini tanımlarsanız daha kolay ve daha zariftir, çünkü bunlar genel kapsamın bir parçasıdır, örn.
class MyObjectClass {
const DEFAULT_A_B = 0;
function a($b = self::DEFAULT_A_B){
}
}
$obj = new MyObjectClass();
$var = $obj->a(MyObjectClass::DEFAULT_A_B);
Bu varsayılan sabitin kod boyunca tam olarak bir kez tanımlandığını unutmayın (yöntem bildiriminde bile değer yoktur), bu nedenle bazı beklenmedik değişiklikler olması durumunda, her zaman işlevi / yöntemi doğru varsayılan değerle sağlayacaksınız.
Bu çözümün netliği elbette okuyucuya hiçbir şey söylemeyen ham varsayılan değerler (gibi NULL
, 0
vb.)
(Beğenmenin $var = a(,,'ddd');
en iyi seçenek olduğuna katılıyorum )