PHP: call_user_func_array: Referans sorundan geçmek

3 Cevap php

Bir fonksiyonu, örneğin başvurulan argümanlarını içeren zaman aşağıda fonksiyon hatası oluşturur:

function test(&$arg, &$arg2)
{
  // some code
}

Şimdi kullanmak call_user_func_array Yukarıdaki fonksiyonu için, bir hata üretecektir olamaz.

Bu sorunu çözmek için?

Ben kullanmak gerekiyor call_user_func_array.

Ayrıca ben onlar referans olarak geçirilen veya değer tarafından geçirilen olup olmadığını önceden bilmediklerini varsayıyorum.

Teşekkürler

3 Cevap

Sen geri çağrılarla denilen işlevlerine başvuruya göre argümanları geçemez. Neden call_user_func_array() s parametreleri başvurular değil olmasıdır. Eğer really, bir geri arama yapmak gerekiyorsa, (nesneler always başvuru tarafından geçirilen) bir nesnenin içine parametrelerini kaydırmak gerekir:

function test($params) {
    echo $params->param1;
    echo $params->param2;
}
$params = (object) array('param1' => $param1, 'param2' => $param2);
call_user_func_array('test', array($params));

Dizide kendi parametreleri saklarken, bu parametreler bir başvuru depolamak emin olun, iyi çalışması gerekir.

Yani:

call_user_func_array("test", array(&param1, &param2));

Büyük bir geçici çözüm http://www.php.net/manual/de/function.call-user-func-array.php#91503 yayınlanmıştır

function executeHook($name, $type='hooks'){ 
    $args = func_get_args(); 
    array_shift($args); 
    array_shift($args); 
    //Rather stupid Hack for the call_user_func_array(); 
    $Args = array(); 
    foreach($args as $k => &$arg){ 
        $Args[$k] = &$arg; 
    } 
    //End Hack 
    $hooks = &$this->$type; 
    if(!isset($hooks[$name])) return false; 
    $hook = $hooks[$name]; 
    call_user_func_array($hook, $Args); 
} 

Gerçek kesmek yorumlarla çevrilidir.