PHP: Переменная на имя функции

Попытка понять, что программное обеспечение Вы пишете, об и отражая что понимание в модели.

16
задан LibraryThingTim 22 November 2009 в 04:35
поделиться

4 ответа

Вы можете сделать это, но не без предварительной интерполяции строки:

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

Или пропустите временную переменную с помощью call_user_func () :

call_user_func('sound_' . $animal);
22
ответ дан 30 November 2019 в 16:14
поделиться

Вы можете сделать это так:

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

Однако гораздо лучше было бы использовать массив:

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

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

Одно из преимуществ метода массива в том, что когда вы вернетесь к вашему коду шесть месяцев спустя и задайтесь вопросом: "Ну и дела, а где эта функция sound_cow используется?" вы можете ответить на этот вопрос с помощью простого текстового поиска вместо того, чтобы следовать всей логике, которая создает имена переменных функций на лету.

15
ответ дан 30 November 2019 в 16:14
поделиться

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

Чтобы выполнить свой пример, вы должны сделать

$animal_function = "sound_$animal";
$animal_function();
4
ответ дан 30 November 2019 в 16:14
поделиться

Вы должны спросить себя, зачем вам это нужно, возможно, вам нужно реорганизовать свой код примерно так:

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

$animal = "cow";
print animal_sound($animal);
1
ответ дан 30 November 2019 в 16:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: