PHP: Bir işlev adı Değişken

4 Cevap php

Ben bir değişkene dayalı bir işlevi tetiklemek istiyorum.

function sound_dog() { return 'woof'; }
function sound_cow() { return 'moo'; }

$animal = 'cow';
print sound_{$animal}(); *

* Satırı doğru değil hattıdır.

Ben önce yaptık, ama ben bulamıyorum. Ben olası güvenlik sorunları, vb farkındayım

Herkes? Çok teşekkürler.

4 Cevap

Bunu, ancak ilk dize interpolasyonuyla olmadan yapabilirsiniz:

$animfunc = 'sound_' . $animal;
print $animfunc();

Veya ile geçici değişken atlama call_user_func():

call_user_func('sound_' . $animal);

Bunu şöyle yapabilirsiniz:

$animal = 'cow';
$sounder = "sound_$animal";
print ${sounder}();

Ancak, çok daha iyi bir yolu bir dizi kullanmak olacaktır:

$sounds = array('dog' => sound_dog, 'cow' => sound_cow);

$animal = 'cow';
print $sounds[$animal]();

Dizi yöntemin avantajlarından biri olduğunu altı ay sonra geri koduna gelip acaba ne zaman "bu sound_cow fonksiyonu kullanılır gee?" yerine anında değişken işlev adları oluşturur tüm mantığı takip etmek zorunda basit bir metin arama ile bu soruya cevap verebilir.

http://php.net/manual/en/functions.variable-functions.php

Sizin örnek yapmak için yaparım

$animal_function = "sound_$animal";
$animal_function();

Bunu yapıyor olması gerekir neden belki aşağıdaki gibi bir şey için kodunuzu refactor gerekir, kendinize sormalısınız:

function animal_sound($type){ 
    $animals=array(); 
    $animals['dog'] = "woof"; 
    $animals['cow'] = "moo"; 
    return $animals[$type];
}

$animal = "cow";
print animal_sound($animal);