Varsayılan istendiğinde bağımsız değişkenlerini atlamak nasıl

5 Cevap

Ben böyle bir işlevi varsa:

function abc($a,$b,$c = 'foo',$d = 'bar') { ... }

Ve ben $c bu varsayılan değer olduğunu varsayalım, ama $d, nasıl PHP bu çağrıyı yapma hakkında gitmek ayarlamak gerekiyor istiyorsun?

5 Cevap

PHP ne yazık ki, bunu yapamaz. Null için kontrol ederek bu işe yarayabilir. Örneğin:

function abc($a, $b, $c = 'foo', $d = 'bar') {
    if ($c === null)
        $c = 'foo';
    // Do something...
}

Sonra bu gibi işlevi çağırır:

abc('a', 'b', null, 'd');

Hayır, tam olarak güzel değil, ama iş yok. Eğer gerçekten maceracı hissettiğiniz, bunun yerine son iki argüman bir ilişkisel dizi geçebileceği, ama ben bunu istiyorum çok daha fazla iş olduğunu düşünüyorum.

Ilişkilendirilebilir diziler argüman listesi büyüyor başladığında özellikle, burada çok kötü değildir:

function abc($args = array()) {
    $defaults = array('c' => 'foo', 'd' => 'bar');
    $args = array_merge($defaults, $args);
}

Açıkça bazıları gerekli yapmak istiyorsa, önünde onları koymak olabilir:

function abc($a, $b, $args = array()) {

}

Bu size kalmış, ben büyük projeleri (null geçirerek zorlama ve bu) hem de yaklaşımlar kullanmak ve dürüstçe tür bu bir tercih gördüm. JavaScript ile aşina iseniz onlara seçenekler geçerken komut bir sürü bu davranış kullanımı almak, yani tamamen yabancı değil.

PHP bu desteklemiyor. (non-explicit ref)

Ben php yapabilirsiniz inanmıyorum.

Ne bir argüman nesne içine tüm parametreleri koymak ve o ayrıştırmak olur?

function abc(arguments) {
  foreach (index=>value in arguments) { ... }
}
abc({message: "Out of condoms.", haveSex: false, code: 404});