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

(Resolvido) Problema com função get de uma classe simples


bartolossi

Pergunta

Bom dia a todos.

Tenho um problema bem chato e tenho certeza que é uma coisa bem simples, mas não consigo achar a solução.

Acesso a seguinte classe (transcrita abaixo), e o retorno é o seguinte:

"Fatal error: Call to undefined method DOMElement::getNome() ... (caminho da linha da página que chama a função)"

Alguém poderia me ajudar por favor?

Desde já muito obrigado!

______________________________________________________________

<?php
    include_once("factory.php");

final class Membro {

    private $nome, $login;

    // construtor
    public function __construct($nome) {
        $this->setNome($nome);
    }
    
    public function setNome($nome) {
        $this->nome = $nome;
    }
    
    public function setLogin($login) {
        $this->login = $login;
    }
    
    public function getNome() {
        return $this->nome;
    }
    
    public function getLogin() {
        return $this->login;
    }
    
    public function consultaLista() {
    
        $sql = "SELECT nome, login FROM usuarios";
        
        // minha classe que acessa o banco e dá o retorno. funciona perfeitamente 
        $banco = Factory::getDatabaseInstance();
        $banco->executeQuery($sql);
        $banco->close();
        
        $dadosMembroEditar = array();
            foreach ($banco->getRecords() as $record) {
            $membro = new self($record["nome"]);
            $membro->setLogin($record["login"]);
            $dadosMembroEditar[] = $membro;
        }
        
        return $dadosMembroEditar;
    }
} 
    
?>

Editado por *FIT*
Adicionar a tag [code]! *FIT*
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
ia ser bom se você tb postasse a parte do codigo onde esta a linha q causa o erro (e tb q apontasse qual é a linha do erro).

Kuroi, mais uma vez obrigado pela atenção.

A função que chama a outra é essa:

$membros = Membro::consultaLista();            
        
        foreach ($membros as $membro) {
            $membro = $xml->createElement("membro");
            $membro->appendChild($xml->createElement("nome", $membro->getNome())); // essa linha dá erro, porque a função getNome, do post anterior não foi encontrada
            $membro->appendChild($xml->createElement("login", $membro->getLogin()));                        
            $pai->appendChild($membro);
        }

Link para o comentário
Compartilhar em outros sites

  • 0

o q faz o metodo createElement() desse seu objeto $xml??

ele deve estar retornando um dado de algum outro tipo (imagino q um objeto da classe DOMElement) e ai esse seu objeto $membro deixa de ser um objeto da classe Membro e ai você não pode mais chamar o getNome() mesmo.

essa linha aqui:

$membro = $xml->createElement("membro");

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

  • 0
o q faz o metodo createElement() desse seu objeto $xml??

ele deve estar retornando um dado de algum outro tipo (imagino q um objeto da classe DOMElement) e ai esse seu objeto $membro deixa de ser um objeto da classe Membro e ai você não pode mais chamar o getNome() mesmo.

essa linha aqui:

$membro = $xml->createElement("membro");
foreach ($membros as $membro) {
            $membro = $xml->createElement("membro"); // cria um nó chamado "membro" no arquivo XML
            $membro->appendChild($xml->createElement("nome", $membro->getNome())); // cria um filho no nó "membro" chamado "nome" com o conteúdo que retorna de getNome()
            ...                        
            $pai->appendChild($membro); // pega o nó "membro" e insrre no arquivo XML
        }
Tentei fazer o seguinte pra testar: Ao invés de pegar o valor que vem de getNome setei um valor na mão, aí gravou o XML corretamente. ------------------------------------------------------------------------------------ Segue transcrição da classe toda: Se puder, por favor pegue este código e cole em uma página PHP e rode. No final tem um código que imprime o erro na tela ----------------------
<?php
    include_once("factory.php");

final class Membro {
    
    private $nome, $login;

    // construtor
    public function __construct($nome) {
        $this->setNome($nome);
    }
    
    public function setNome($nome) {
        $this->nome = $nome;
    }
    
    public function setLogin($login) {
        $this->login = $login;
    }
    
    public function getNome() {
        return $this->nome;
    }
    
    public function getLogin() {
        return $this->login;
    }
    
    public function consultaLista() {
    
        $sql = "SELECT nome, login FROM usuarios"; // coloque uma consulta a qualquer tabela de qualquer banco que você tenha aí
        
        // minha classe que acessa o banco e dá o retorno. funciona perfeitamente 
        $banco = Factory::getDatabaseInstance();
        $banco->executeQuery($sql);
        $banco->close();
        
        $dadosMembroEditar = array();
            foreach ($banco->getRecords() as $record) {
            $membro = new self($record["nome"]);
            $membro->setLogin($record["login"]);
            $dadosMembroEditar[] = $membro;
        }
        
        return $dadosMembroEditar;
    }
}

$membro = Membro::consultaLista(); // roda a função
$membro->getNome();
echo (string)$membro; // imprime o valor na tela

?>

Editado por *FIT*
Adicionar a tag [code]! *FIT*
Link para o comentário
Compartilhar em outros sites

  • 0

se digitar na mao vai funcionar mesmo.

eu não sei muito bem o q você quer fazer, mas acho q você ta tentando usar o mesmo objeto $membro pra funcionar como dois objetos diferentes ao mesmo tempo.

talvez o q você quera seja mais o menos isso, tente ai:

$membros = Membro::consultaLista();

foreach ($membros as $membro) {
$membroxxx = $xml->createElement("membro");
$membroxxx->appendChild($xml->createElement("nome", $membro->getNome()));
$membroxxx->appendChild($xml->createElement("login", $membro->getLogin()));
$pai->appendChild($membroxxx);
}[/code]

Link para o comentário
Compartilhar em outros sites

  • 0
se digitar na mao vai funcionar mesmo.

eu não sei muito bem o q você quer fazer, mas acho q você ta tentando usar o mesmo objeto $membro pra funcionar como dois objetos diferentes ao mesmo tempo.

talvez o q você quera seja mais o menos isso, tente ai:

$membros = Membro::consultaLista();

foreach ($membros as $membro) {
$membroxxx = $xml->createElement("membro");
$membroxxx->appendChild($xml->createElement("nome", $membro->getNome()));
$membroxxx->appendChild($xml->createElement("login", $membro->getLogin()));
$pai->appendChild($membroxxx);
}

Cara, quando o prazo aperta a gente começa a ficar cego.

Mais uma vez resolvido.

Muitíssimo obrigado pela força!

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...