PHP fonksiyon belirli değişken geçmek için nasıl

3 Cevap php

Ben bunu 1. ve 3. parametreler için bir değer geçmek istiyorum ama 2. bir varsayılan istiyorum ... 3 parametrelerde alabilir gerektiren bir PHP işlevi var ...

Nasıl aksi takdirde beni 1. ve 2. yuvaları için değerleri geçen olarak yorumlanabilir, ben geçirerek hangilerinin belirtebilirsiniz.

Teşekkürler.

3 Cevap

Sen parametreler listenin sonunda değil bir parametre "geçemez" olamaz:

  • Eğer 3. parametresini belirtmek isterseniz, 1. ve 2. olanlar geçmek zorunda
  • Eğer 2. parametresini belirtmek istiyorsanız, size 1 tane geçmek zorunda - ama optionnal eğer 3, dışarı bırakılabilir.

Sizin durumda, 2. parametre için bir değer geçmek zorunda - varsayılan bir, ideal olarak; ki, evet, bu varsayılan değer bilmek için gereklidir.


A possible alternative would be not have your function take 3 parameters, but only one, an array :

function my_function(array $params = array()) {
    // if set, use $params['first']
    // if set, use $params['third']
    // ...
}

Ve bu böyle o işlevi çağırır:

my_function(array(
    'first' => 'plop',
    'third' => 'glop'
));

Bu olanak sağlayacak:

  • herhangi bir sayıda parametre kabul
  • bütün bunlar optionnal olabilir

Ancak:

  • kodunuzu anlamak için daha az kolay olurdu, ve dokümantasyon daha az yararlı olacaktır: adlandırılmış parametreleri
  • IDE size fonksiyonu kabul parametreleri hangi ipuçları vermek mümkün olmaz

Bir varsayılan parametre tanımlı ettik, ondan sonra tüm parametreler gerekli edilemez. Gibi bir şey yapabilirsiniz:

const MY_FUNCTION_DEFAULT = "default";

public function myFunction($one, $two = "default", $three = 3)
{
   if (is_null($two)) $two = self::MY_FUNCTION_DEFAULT;
   //...
}

// call
$this->myFunction(1, null, 3);

Ayrıca bir boş parametre kümesi tanımlamak ve fonksiyonu yeteri kadar basit ise func_get_args to pull in parameters and analyze those using instanceof or typeof/gettype türü için kontrol kullanabilirsiniz.

Sen ReflectionFunction kullanabilirsiniz. http://www.php.net/manual/en/function.call-user-func-array.php#66121: Bu sorun zaten php.net isimsiz bir katılımcı tarafından çözüldü, burada orinal bakın

For those wishing to implement call-by-name functionality in PHP, such as implemented e.g. in DB apis, here's a quick-n-dirty version for PHP 5 and up

function call_user_func_named($function, $params)
{
    // make sure we do not throw exception if function not found: raise error instead...
    // (oh boy, we do like php 4 better than 5, don't we...)
    if (!function_exists($function))
    {
        trigger_error('call to unexisting function '.$function, E_USER_ERROR);
        return NULL;
    }
    $reflect = new ReflectionFunction($function);
    $real_params = array();
    foreach ($reflect->getParameters() as $i => $param)
    {
        $pname = $param->getName();
        if ($param->isPassedByReference())
        {
            /// @todo shall we raise some warning?
        }
        if (array_key_exists($pname, $params))
        {
            $real_params[] = $params[$pname];
        }
        else if ($param->isDefaultValueAvailable()) {
            $real_params[] = $param->getDefaultValue();
        }
        else
        {
            // missing required parameter: mark an error and exit
            //return new Exception('call to '.$function.' missing parameter nr. '.$i+1);
            trigger_error(sprintf('call to %s missing parameter nr. %d', $function, $i+1), E_USER_ERROR);
            return NULL;
        }
    }
    return call_user_func_array($function, $real_params);
}