Nasıl ilk isteğe bağlı parametre sonra PHP isteğe bağlı bir parametre kurarım

3 Cevap php

Ben php için oldukça yeni ve ben nasıl ben ilk isteğe bağlı parametre sonra isteğe bağlı bir parametre kurarım anlamaya çalışıyorum?

Örneğin ben aşağıdaki kodu var:

function testParam($fruit, $veg='pota',$test='default test'){
echo '<br>$fruit = '.$fruit;
echo '<br>$veg = '.$veg;
echo '<br>Test = '.$test;
}

I aşağıdaki arama yaparsanız:

echo 'with all parama';
testParam('apple','carrot','some string');
//we get:
//with all parama
//$fruit = apple
//$veg = carrot
//Test = some string

echo '<hr> missing veg';
testParam('apple','','something');
//we get:
//missing veg
//$fruit = apple
//$veg = 
//Test = something

echo '<hr> This wont work';
testParam('apple',,'i am set');

Ben son örnekte ben varsayılan $ sebze parametresi olarak 'patatesleri' göstermek, böylece bir arama yapmak, ancak $ testi geçmek 'i set yapıyorum' denemek istiyorum.

Ben ben bunun hakkında php.net şey bulamıyorum gibi diğer bazı sözdizimi varsa $ sebze = 0 'patatesleri kullanabilirsiniz ama sadece merak olmadığını söylemek kodunda şube daha sonra $ sebze içine 0 geçebilir sanırım.

3 Cevap

Sadece varsayılan parametreleri ile ne istediğinizi yapamazsınız. Varsayılan tek eksik argümanlar için geçerlidir ve sadece son argüman (lar) eksik olabilir.

Sen hatları gibi ya da ekleyebilirsiniz

  $vega = $vega ? $vega : 'carrot';

gibi işlevini çağırın

testParam('apple',false,'something');

ya da anahtar gibi parametre isimleri ile bir dizi parametreleri geçen daha genel tekniği kullanın. Gibi bir şey

function testparam($parms=false) {
    $default_parms = array('fruit'=>'orange', 'vega'=>'peas', 'starch'=>'bread');
    $parms = array_merge($default_parms, (array) $parms);
    echo '<br>fruit  = $parms[fruit]';
    echo '<br>vega   = $parms[vega]';
    echo '<br>starch = $parms[starch]';
}

testparm('starch'=>'pancakes');
//we get:
//fruit = orange
//vega  = peas
//starch = pancakes

Bu, biraz daha ayrıntılı bir değil, aynı zamanda daha esnektir. Varolan arayanlar değiştirmeden parametreleri ve varsayılan ekleyebilirsiniz.

Ne yazık ki, PHP bunu yapamazsınız.

Siz 0'a geçmek zorunda, ya da null, ya da başka bir değer ve bu değeri 0 veya null eğer, varsayılan değer olarak değiştirin.

Here size daha fazla bilgi vermek gereken bir sorudur.

Bu kullandığım tekniktir:

function testParam($fruit, $veg='pota', $test='default test') {

    /* Check for nulls */
    if (is_null($veg))  { $veg = 'pota'; }
    if (is_null($test)) { $test = 'default test'; }

    /* The rest of your code goes here */
}

Şimdi sadece bu yüzden gibi NULL geçmek, herhangi bir isteğe bağlı parametre varsayılan değeri kullanın.

testParam('apple', null, 'some string');

Bu örnekte, $veg eşit olacaktır 'pota'

Bu kod örneğin olumsuz iki varsayılan değerleri kodlamak zorunda olmasıdır. IDE bana anında bana varsayılan değerleri gösterir parametre ipuçlarını verir, çünkü sizin gibi kolayca iki kez ayarlamak ister, iki kez varsayılan değeri kod zorunda kalmamak parametre bildiriminde null varsayılan değeri ayarlamak, ama olabilir fonksiyon imzada.