PHP hata: yöntemi adı bir dize olmalıdır

0 Cevap

Ben gerçi o benim sorunun alakalı eğer emin değilim ve çok eski, bu konuda bir hata raporu (http://bugs.php.net/bug.php?id=24286) bulduk. Bu benim kodudur:

class RegExp {
    function name($e){ .... }
    function email($e){ .... }
    function phone($e){ .... }
}    

$regexp = new RegExp();
$final_keys= array("name", "email", "phone");

for($index=0; $index < count($final_keys); $index ++){
    if(!$regexp->$final_keys[$index]($_POST[$final_keys[$index]])){
        $invalid_uri_vars .= $final_keys[$index].",";
    }
    else{
        $uri_vars = "&".$final_keys[$index]."=".$_POST[$final_keys[$index]];
    }
}

Ne yapar bu çağrılacak yöntemin adı olarak bir diziden bir değer kullanır. Diğer bir deyişle, ben onun adıyla bir değişken $final_keys[$index] kullanarak bir işlev çağrısı uygulamak çalışıyorum.

* UPDATE: aşağıda önerileri uygulama çalıştı, hiçbir şey iş gibi görünüyor. Önerilen İşte benim değişiklikler biri:

for($key=0; $key < count($final_keys); $key ++){
    if(!$regexp->{$final_keys[$key]}($_POST[$final_keys[$key]])){
        $invalid_uri_vars .= $final_keys[$key].",";
    }
    else{
        $uri_vars = "&".$final_keys[$key]."=".$_POST[$final_keys[$key]];
    }
}

Benim özgün kodu olarak aynı hatayı alıyorum. Başka bir yöntem call_user_func kullanarak ama ben doğru yaptım emin değilim:

for($key=0; $key < count($final_keys); $key++){
    if(!call_user_func(array($regexp, $final_keys[$key]), $_POST[$final_keys[$key]])){
        $invalid_uri_vars .= $final_keys[$key].",";
    }
    else{
        $uri_vars = "&".$final_keys[$key]."=".$_POST[$final_keys[$key]];
    }   
}

Ve ben bu hatayı alıyorum: Warning: call_user_func(Array) [function.call-user-func]: First argument is expected to be a valid callback in /.........testreqmeta.php on line 91

0 Cevap