PHP Fonksiyon Tanımı, Boş Argümanlar

5 Cevap php

Null olabilir parametreleri olan bir fonksiyon, yapı için en iyi yolu nedir?

Örn

    function newDate($day, $time = null, $overRide) {

        Do something with the variables

    }

# newDate('12', '', 'yes');

Aşağıdaki gibi basitçe fonksiyonunu yeniden olacaktır:

    function newDate($day, $overRide, $time = null) {

        Do something with the variables

    }

# newDate('12', 'yes');

5 Cevap

Daha iyi işlevi bildirisinin sonunda default parameters tanımlamak için ..

gibi görünüyor çağrı, merkezi, null veya varsayılan parametresi olan zaman:

newDate($someDay, null, $override);

Ancak sonunda varsayılan argümanları olan, basit bir fonksiyon çağrı sağlar:

newDate($someDay, $override); // null is passed for $time

Ben aslında bir seçim olduğunu sanmıyorum.

Varsayılan parametreler fonksiyonu üzerinde son olanlar olmalıdır. Aksi takdirde, çağırdığınızda newDate(1, 2), PHP newDate(1, 2, null) nereye istedim olabilir haline dönecek newDate(1, null, 2).

PHP'nin bak documentation on function arguments.

Sadece sürece argümanlar 'akış' hala mantıklı olarak mantıklı: (gerekli olanlar sonra isteğe bağlı args hareketli yani) size açıkladık neler. (Yani:. Onlar mantıklı belirli bir düzen içinde olması gerekmez Sadece eğer) Ancak, yine de hedefe ulaşmanın en iyi yolu.

Isteğe bağlı bağımsız değişkenler çok sayıda potansiyel varsa söyledi, bu kontrol etmek için isteğe bağlı args anahtar => değer çiftleri içerecektir isteğe bağlı bir dizi kabul etmek için bir fikir olabilir.)

(Bu arada, ilk örnekte, sizin gerçekten yerine'' null geçmelidir.)

Sorun olabilir null parametre değildir. Herhangi bir parametre sadece işlevine ileterek, null olabilir. Burada zorluk neden olan varsayılan değerdir. Varsayılan değere sahip parametreler, onlardan önce geldiğini şey varsaymak derleyici için basit beri sonunda olması sabit argümanlardan bir parçasıdır.

Birçok isteğe bağlı argümanları olabilir fonksiyonları için geçerli en iyi uygulama bir dizi kullanarak sahte isimli argümanları yazma anda yanıtlayanın bilgisi, için, olduğunu.

function foo($options = array()) {
  $options = array_merge(array(
    'foo' => 'defaultFoo',
    'bar' => 'defaultBar',
    'fuz' => false,
    'buz' => null,
  ), $options);

  if ($options['fuz']) {
    return $options['foo'];
  }

  return $options['foo'] . $options['bar'] . $options['buz'];
}

Fonksiyonu ve genişletmek için bir zevk kullanırken bu ilk yazma ayrıntılığı, ama çok okunabilir. Bu yaklaşımın etkinliği Symfony 1.4 çerçevesinde geniş kullanımı gösterdiği, ve bir şekilde JQuery JavaScript nesneleri ile paralellik edilir.

Aramaları array_merge ve dizi nedeniyle bazı yük vardır.