Bir işlevi çağırırken varsayılan değerini kullanarak

4 Cevap php

PHP bir işlevini çağırabilirsiniz. Bu deyim kullanılarak tüm parametreleri arayarak değil.

function test($t1 ='test1',$t2 ='test2',$t3 ='test3')
{
echo "$t1, $t2, $t3";
}

Ve sadece bu gibi işlevi kullanabilirsiniz

test();

Yani sadece, ben sonuncusu diğerleri farklı ama olmak istiyorum Diyelim ki. Ben bir şey olabilir tek yolu hiçbir başarı ile yaparak olduğunu:

test('test1','test2','hi i am different');

Ben bu çalıştı:

test(,,'hi i am different');
test(default,default,'hi i am different');

Böyle bir şey yapmak için en iyi yolu nedir?

4 Cevap

Diziler kullanın:

function test($options = array()) {
    $defaults = array(
        't1' => 'test1',
        't2' => 'test2',
        't3' => 'test3',
    );
    $options = array_merge($defauts, $options);
    extract($options);
    echo "$t1, $t2, $t3";
}

İşlev bu şekilde çağırır:

test(array('t3' => 'hi, i am different'));

Ham PHP kullanarak bunu yapamaz. Sen gibi bir şey deneyebilirsiniz:

function test($var1 = null, $var2 = null){
    if($var1 == null) $var1 = 'default1';
    if($var2 == null) $var2 = 'default2';
}

ve sonra varsayılan değişken tanımlayıcı olarak null ile, senin işlevini çağırın. Ayrıca varsayılan değerlerle bir dizi kullanabilirsiniz, bu daha büyük bir parametre listesi ile daha kolay olacak.

Daha da iyisi tüm bu kaçınıyorum, ve tasarımı biraz yeniden gözden geçirmek.

Varsayılan değerlere sahip parametreler PHP, diğerleri sonra, son olmak zorunda ve bu noktaya kadarki tüm diğerleri işlevi çağrılırken doldurulmalıdır. Ben varsayılan değer tetikleyen bir değer geçmek için yine de bilmiyorum.

Ne ben normalde bu durumlarda mutlaka yerine bir dizi olarak parametrelerini belirtmek için. (Denenmemiş) aşağıdaki örneğe bir göz atalım:

<?php
test(array('t3' => 'something'));

function test($options = array())
{
  $default_options = array('t1' => 'test1', 't2' => 'test2', 't3' => 'test3');
  $options = array_merge($default_options, $options);

  echo $options['t1'] . ', ' . $options['t2'] . ', ' . $options['t3'];
}
?>