Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
$this->acao = $row['acao'];
$this->id = $row['id'];
$this->server = $row['servidor'];
$this->alias = $row['alias_componente'];
$this->nome = $row['nome_componente'];
$this->status = $row['status'];
$this->acao($this->id,$this->server,$this->alias,$this->nome,$this->status);
Tenho o trecho de código acima, no objeto $this->acao (tenho o nome da função, vamos supor que é enviar_email), gostaria de chamar essa função dinamicamente pois em certos casos posso retornar do banco uma função com outro nome. Atualmente estou recebendo este erro ao implementar desta forma:
#!C:/xampp/php/php.exe #!C:/xampp/php/php.exe Fatal error: Call to undefined method enviar_evento::acao() in C:\xampp\cgi-bin\temp\php\enviar_evento.php on line 27
>
cria um interface para padronizar a assinatura do metodo, depois faça os objetos implementarem ela.
Não faço a mínima ideia de como ficaria. Poderia me dar uma ajuda?
Acho que você quer fazer um EVAL(), mas a dúvida não esta clara.
$this->acao = $row['acao'];
//...
$this->acao($this->id,$this->server,$this->alias,$this->nome,$this->status);
Ahn? Você tem uma propriedade e um método com o mesmo nome?
>
$this->acao = $row['acao'];
//...
$this->acao($this->id,$this->server,$this->alias,$this->nome,$this->status);
Ahn? Você tem uma propriedade e um método com o mesmo nome?
Aí é que esta, não tem o método, ele tem outros métodos... exemplo:
De acordo com a ação informada, um desses métodos (ações) deve ser chamado.
Uma opção que eu disse foi usar EVAL, mas dá pra fazer de outras formas.
Esse foi o meu entendimento.
O método existe.
Consegui resolver de uma forma bem simples:
$this->acao = $row['acao'];
$this->id = $row['id'];
$this->server = $row['servidor'];
$this->alias = $row['alias_componente'];
$this->nome = $row['nome_componente'];
$this->status = $row['status'];
$acao = $this->acao;
$acao($this->id,$this->server,$this->alias,$this->nome,$this->status);
Muito simples de resolver, mas dias acordado deixam a pessoa cansado.
Senhores, muito obrigado pela atenção.
então você queria executar uma função e não um metodo?
:)
Acho que bastava fazer isso:
$this->$acao(...);
>
:)
Acho que bastava fazer isso:
$this->$acao(...);
se esse metodo n existir na classe da erro... agora como a função de precisa de um objeto para chama-la, fica bem mais facil.
do jeito q esta o codigo parece um função 'perdida' no meio de um metodo/classe...
>
:)
Acho que bastava fazer isso:
$this->$acao(...);
Se eu tentar executar desta forma o erro é: Notice: Undefined variable: acao in C:\xampp\cgi-bin\temp\php\enviar_evento.php on line 26 Fatal error: Method name must be a string in C:\xampp\cgi-bin\temp\php\enviar_evento.php on line 26
>
Se eu tentar executar desta forma o erro é: Notice: Undefined variable: acao in C:\xampp\cgi-bin\temp\php\enviar_evento.php on line 26 Fatal error: Method name must be a string in C:\xampp\cgi-bin\temp\php\enviar_evento.php on line 26
Hmmmm... OK
Deu um conflito dos nomes e enrolou a interpretação do script.
Bem, o caso já esta solucionado.
cria um interface para padronizar a assinatura do metodo, depois faça os objetos implementarem ela.