Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

_SDinfo

Problema com PHP OOP

Recommended Posts

$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

Compartilhar este post


Link para o post
Compartilhar em outros sites

cria um interface para padronizar a assinatura do metodo, depois faça os objetos implementarem ela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

$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?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

$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:

- enviar(), checar(), apagar(), etc...

 

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então você queria executar uma função e não um metodo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

:)

 

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

:)

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.