Chamar uma função de nome dinâmico

Não consigo chamar uma função cujo nome é dinamicamente lido do banco de dados.

Criei um botão php e neste algo assim:

$metodoX = {rs[0][0]};
$aux = $metodoX(a,b,c); // aqui já dá pau e para nem o botão Ok mostra.
echo "
Resultado do método $metodoX = " . $aux;

Em php puro isso funciona. No SC7 nada, mesmo eu editando o código gerado por ele. Se alguém souber como contornar me de um toque.

Eu acho que pra isso você vai ter que usar a função eval() do php.

Eu já passei por uma situação parecida, meu cenário era o seguinte: eu deveria gerar XML para diversos buscadores (Buscapé, Shopping UOL, GoogleShopping, etc…), ai eu criei métodos (dentro da aplicação) que trabalhassem com cada um deles: XMLBuscape(), XMLUol(), XMLGoogle().

Logo depois criei um outro método que cria o XML para cada buscador: gerarXML(). Esse método tem que buscar o nome do buscador no banco e depois montar o nome do método usando o nome do buscador.

[i]$sql = "SELECT nm_buscador FROM tb_buscador = ‘Buscape’;
sc_lookup(“buscador”, $sql);

$metodo = “XML” . {buscador[0][0]};[/i]

Até aqui foi tudo certo, mas tem um ponto a ser observado, quando seus métodos vêm da aplicação ou de um biblioteca, o Scriptcase incorpora isso dentro da aplicação que é uma classe PHP, aí resolvi dessa maneira.

$resultado = call_user_func(array(CLASS, $metodo), $parametro);

A função call_user_func do PHP executa métodos do usuário, como os métodos estão incorporador dentro da aplicação, eu usei a constante CLASS que retorna o nome da classe que possui o método a ser executado, o último valor é um parâmetro que o método precisa para ser executado, bom aí foi só trabalhar com resultado obtido.

[RESOLVIDO] com sua dica:

call_user_func(array(CLASS, $metodoX), $parm1, $parm2);

onde $metodoX é lido do BD.

nossa tô ralando desde hoje cedo nisso. Tentei EVAL de tudo que é jeito, mexi no código gerado pelo SC e nada.

MUITO OBRIGADO MESMO!

Ficou feliz em ajudar, eu particularmente nunca usei o eval(), mas acho q tem gente aqui q usa ele pra executar scripts q estão no BD.

Bom enfim, boa sorte com seu code.

Ambas as formas funcionam, mas o eval eh como se gerasse o include de um script php que esta na memoria, mais antigo e mais usado em programação procedural.

O call_user_func eh mais usado dentro do OOP, eh um comando mais recente.

É como vc falou call_user_func é OOP, por isso achei mais viável para nosso colega usar, já que a aplicação não deixa de ser uma classe.

Você utiliza com frequencia o eval()?? Tem algum exemplo de como usá-lo no Scritpcase?? Seria possível disponibilizar o code??

eval("$var=123");
ou

$a="$var=123";
eval($a);

Cria a variável var com valor 123.

Praticamente aceita qualquer código php, menos macros SC.

Haroldo como funcionaria o eval com funcao…
exemplo eval("return ".$funcao$i;
Fatal error: Call to undefined function somar();
tentei usar call_user_func_array($funcao[$i],array($param1,$param2));
não retorna nenhum resultado

função
function somar($param1,$param2)
{
$soma = $param1+$param2);
return $soma;
}

Agradeço se conseguir me ajudar…

https://www.vivaolinux.com.br/dica/Funcoes-com-nomes-variaveis-em-PHP-isso-existe-sim

https://secure.php.net/manual/pt_BR/functions.variable-functions.php

Opa Haroldo continuo não funcionando.
Funcao variavel tbm não funcionou, o scriptcase não reconhece a funcão, chamando direto ele reconhece."3 Fatal error: Call to undefined function somar() in C:\Program Files (x86)\NetMake\v81\wwwroot\scriptcase\app… "
O 3 no inicio é resultado do somar chamando direto… A Funcao esta na biblioteca interna…São varias funções que vão ter resultado apos selecao no ajax onchange…

Não é scriptcase, não tem nada a ver com scriptcase.
É PHP. Os exemplos dos links funcionam, mas eu não sei o que você esta querendo fazer.

Recebo a nome da função do banco de dados e ele executa conforme parametros.
Escolhe funcao x(param1,param2)
retorna x
funcao z(param1,param2)
retorna z
ele somente vai executando as funções conforme o chamado.

mas as funções existem?

Resolvi eu vi que no codigo do scriptcase antes de chamar a funcão ele chama $this-> somente ajustei para
$fun_explode = explode(";",{funcoes});
$num_array = count($fun_explode);
$nfuncoes = “”;
$i ="";
for( $i = 0; $i < $num_array ; $i++)
{

$func = "somar";
$teste = $this->$func("1","2"); 
 				
}

Mas muito obrigado Haroldo…Valeu pela ajuda…