Nasıl bir dize değişkeni oluşturulan bir işlev adını kullanarak bir işlev diyorsunuz

5 Cevap

Bazı kod otomatik sürecinde, ben bir dize ne dayalı bir fonksiyonu çağırıyoruz için arıyorum.

Örneğin, ben dize "Bu," ayarlanmış olan $somevar bir değişken var. Şimdi bir fonksiyonu çalıştırmak istiyorum doThis();

Yani, ben yazabilirim umuyordum do.$somevar($var,$var2). Ben çalıştırmak istiyorum doThis($var1,$var2).

Bu mümkün mü?

5 Cevap

Sen call_user_func Bunu gerçekleştirmek için kullanabilirsiniz.

call_user_func("do" . $somevar, $var1, $var2);

Ayrıca is_callable hata koşulları kontrol etmek için kullanabilirsiniz.

if (is_callable("do" . $somevar)) {
    call_user_func("do" . $somevar, $var1, $var2);
} else {
    echo "Function do" . $somevar . " doesn't exist.";
}

Bunu şöyle yapabilirsiniz sanmıyveyaum, ama bunu yapabilirsiniz:

call_user_func('do'. $somevar, $var, $var2);

veya

$func = 'do' . $somevar;
$func($var, $var2);

Bu php tamamen yasaldır

$myVar = 'This';

$method = 'do'.$myVar; // = doThis
$class  = new MyClass();
$class->$method($var1, $var2, ...); // executes MyClass->doThis();
$fname="do$somevar";
$fname();

Ama bunu kullanmadan önce iki kere düşünmek gerekir.

call_user_func veya call_user_func_array kontrol

class myclass {
    static function say_hello()
    {
        echo "Hello!\n";
    }
}

$classname = "myclass";

call_user_func(array($classname, 'say_hello'));
call_user_func($classname .'::say_hello'); // As of 5.2.3