Попытка понять, что программное обеспечение Вы пишете, об и отражая что понимание в модели.
Вы можете сделать это, но не без предварительной интерполяции строки:
$animfunc = 'sound_' . $animal;
print $animfunc();
Или пропустите временную переменную с помощью call_user_func () :
call_user_func('sound_' . $animal);
Вы можете сделать это так:
$animal = 'cow';
$sounder = "sound_$animal";
print ${sounder}();
Однако гораздо лучше было бы использовать массив:
$sounds = array('dog' => sound_dog, 'cow' => sound_cow);
$animal = 'cow';
print $sounds[$animal]();
Одно из преимуществ метода массива в том, что когда вы вернетесь к вашему коду шесть месяцев спустя и задайтесь вопросом: "Ну и дела, а где эта функция sound_cow
используется?" вы можете ответить на этот вопрос с помощью простого текстового поиска вместо того, чтобы следовать всей логике, которая создает имена переменных функций на лету.
http://php.net/manual/en/functions.variable-functions.php
Чтобы выполнить свой пример, вы должны сделать
$animal_function = "sound_$animal";
$animal_function();
Вы должны спросить себя, зачем вам это нужно, возможно, вам нужно реорганизовать свой код примерно так:
function animal_sound($type){
$animals=array();
$animals['dog'] = "woof";
$animals['cow'] = "moo";
return $animals[$type];
}
$animal = "cow";
print animal_sound($animal);