Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Chamar uma função a partir de uma String


William Miranda

Pergunta

Olá pessoal estou tentando criar uma classe usando reflection para setar valores em variaveis e para recuperar valoes de variaveis

Gostaria de saber como posso chamar uma função/metodo através de uma string.

Eu já consegui recuparar o nome dos métodos, agora gostaria de executar esses métodos

Segue exemplo:

class Pessoa{
private $nome
private $idade;

public function getNome(){
return $this->nome;
}
public function getIdade(){
return $this->idade;
}
}

public SuperDAO{
public setValores($ob){
$arrayMetodos = obtemMetodos();
foreach ($metodos as metodo){
$obj->metodo();//aqui esta o problema eu consegui pegar os metodos agora como eu chamo ele
//eu tenho o nome da classe, peguei com reflection e tenho o nome do método, mas tudo isso 
//como string, agora eu quero executar
}
}
}

Desde já agradecido

William Miranda

Editado por William Miranda
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

William,

Preparei um exemplo, neste exemplo, eu recupera todos os metodos da classe Pessoa e executo cada metodo, que retorna um valor já definido na classe.

Faça um teste para ver se resolve seu problema.

<?php
class Pessoa
{
    private $nome        = 'Valor da Propiedade Nome';
    private $idade       = 'Valor da Propiedade Idade';
    private $estadoCivil = 'Valor da Propiedade Casado';

    public function getNome(){
        return $this->nome;
    }
    public function getIdade(){
        return $this->idade;
    }

    public function getEstadoCivil(){
        return $this->estadoCivil;
    }
}

    //Intancia da classe Pessoa
    $objPessoa = new Pessoa();
    
    $api = new ReflectionClass('Pessoa');
    foreach($api->getMethods() as $method)
    {
        //Recupera o nome do metodo
        $nomeFuncao = $method->getName();

        //Executa o metodo do objPessoa e recupera o valor
        eval("\$valor = \$objPessoa->\$nomeFuncao();") . "<br>";

        //Imprime na tela o valor retornado pelo metodo
        print $valor . '<br>';
    }
?>

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Cara eu vou tentar aqui depois respondo, mas tu entendeu mesmo a minha necessidade, pois eu tinha feito exatamente isso , havia recuperado o nome do método com o getName(), mas não sabia como executa-lo.

Estou tentando montar um DAO Genérico, com injeção de dependência, você passa a classe que Representa o Bean ou o VO e ele le o nome da classe, e executa os metodos na tabela com o nome da Classe passada é meio que um ORM, eu sei que tem varias framework que faz isso, mas isso está me servindo como desafio, pois adoro PHP, mas trabalho hoje com JAVa.

valeu depois respondo se foi resolvido ou não

Mas já de antemão

MUITO OBRIGADO

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...