Ir para conteúdo

POWERED BY:

Arquivado

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

Roberto Vinicius

Fatal error: Call to a member function getNome()

Recommended Posts

Pessoal é o seguinte,

 

Estou com um bug aparentemente simples, mas que não consigo identificar.

echo "<h1>".$associado -> getNome()."</h1>"; //Aqui o getNome é exibido normalmente
    
$html .= "<tr><td align='center'>".$associado -> getNome()."</td>";

echo $html; //aqui aparece o erro

Tenho um objeto associado e tenho que exibir o nome dele em uma coluna. No servidor local o código acima roda normalmente, mas no web não. Este echo <h1> é um teste que coloquei, e ele exibe beleza. Mas quando concateno dentro da variável $html é exibido o erro Fatal error: "Call to a member function getNome()"..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse erro costuma acontecer quando você chama um método em uma variável que não é um objeto.

 

Tem certeza de que foi instanciado um objeto na variável $associado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse erro costuma acontecer quando você chama um método em uma variável que não é um objeto.

 

Tem certeza de que foi instanciado um objeto na variável $associado?

Tenho sim Rafa Marques, tanto que o conteúdo que é colocado no echo na <h1> é exibido. E na linha abaixo não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse é todo o código? Não acontece nada entre uma linha e outra?

foreach ($emprestimos as $empasso) {
	
	$asso = new Associado();
	
	$asso = $assoDAO -> pesquisaAssociadoId($empasso -> getId_associado());
	
	$saldodevedor = $empasso -> getValor();
	
	$valorParcela = number_format($empDAO -> Price($empasso -> getValor(), $empasso -> getPrestacoes(), $empasso -> getJuros()), 2, '.', '');
	
	$jurostotal = 0;
	$parcelaspagas = 0;
	$jurospago = 0;
	$jurosareceber = 0;
	$valortotalpago = 0;
	$valortotalareceber = 0;
	
	for ($i=1; $i <= $empasso -> getPrestacoes(); $i++) {	
		
		$juros = $empDAO -> calculaJuros($saldodevedor, $empasso -> getJuros());
		$amort = $valorParcela - $juros; 
		
		$jurostotal = $jurostotal + $juros;
						
		$saldodevedor = $saldodevedor - $amort;
		
		if($pagDAO -> parcelaPaga($i, $empasso -> getIdempassociado())){
			$jurospago = $jurospago + $juros;	
			$parcelaspagas++;
			$valortotalpago = $valortotalpago + $valorParcela;
		}else{
			$jurosareceber = $jurosareceber + $juros;
			$valortotalareceber = $valortotalareceber + $valorParcela;
		}
		
	}
	
	echo "<h1>".$asso -> getNome()."</h1>";
	$html .= "<tr>
			<td align='center'>".$asso -> getNome()."</td>
			<td align='center'>".date("d/m/Y",strtotime($empasso -> getData()))."</td>
			<td align='center'>".number_format($empasso -> getValor(),2,",",".")."</td>
			<td align='center'>".number_format($jurostotal,2,",",".")."</td>
			<td align='center'>".$empasso -> getPrestacoes()."</td>
			<td align='center'>".$parcelaspagas."</td>
			<td align='center'>".number_format($empasso -> getSaldodevedor(),2,",",".")."</td>
			<td align='center'>".number_format($valortotalpago,2,",",".")."</td>
			<td align='center'>".number_format($jurospago,2,",",".")."</td>
			<td align='center'>".number_format($valortotalareceber,2,",",".")."</td>
			<td align='center'>".number_format($jurosareceber,2,",",".")."</td>
	</tr>";
	
	}

Este é o trecho de código original

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deve ser isso o erro.

Tem como postar o erro inteiro?

 

Se funciona em um e não funciona no outro, não faz sentido.

Caso fosse isso, você poderia resolver muito simplesmente só fazendo isso:

$nome = $asso -> getNome();
echo "<h1>".$nome."</h1>";
	$html .= "<tr>
			<td align='center'>".$nome."</td>

Teria que ver o erro todo pra imaginar o que pode ser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deve ser isso o erro.

Tem como postar o erro inteiro?

 

Se funciona em um e não funciona no outro, não faz sentido.

Caso fosse isso, você poderia resolver muito simplesmente só fazendo isso:

$nome = $asso -> getNome();
echo "<h1>".$nome."</h1>";
	$html .= "<tr>
			<td align='center'>".$nome."</td>

Teria que ver o erro todo pra imaginar o que pode ser.

 

O erro completo:

Fatal error: Call to a member function getNome() on a non-object in E:\home\aeappe.com.br\httpdocs\Gestor\Relatorios\RelatorioGeral.php on line 154

A linha 154 se refere a:

<td align='center'>".$asso -> getNome()."</td>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Aquele código que eu sugeri não funcionou?

$nome = $asso -> getNome();
echo "<h1>".$nome."</h1>";
	$html .= "<tr>
			<td align='center'>".$nome."</td>

Não, eu já havia tentado desta forma. O que não entendo é rodar normalmente no servidor local. E quando subo acontece o erro, veja os prints:

 

SERVIDOR LOCAL:

https://www.dropbox.com/s/pch1qrhfwuu590b/Localhost.png?dl=0

 

SERVIDOR WEB:

https://www.dropbox.com/s/c0flrt3y4vcp72z/Servidor%20Web.png?dl=0

 

No servidor Local só existe um empréstimo e está sendo exibido normalmente, No web existem 8, os nomes são exibidos na <h1> e logo em seguida o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, pra você reproduzir o erro tem que ter o ambiente mais semelhante possível.

 

Talvez seja um erro que só ocorre quando existe mais de um valor no banco.

 

Não pude deixar de notar que nas primeiras linhas você instancia uma classe e depois simplesmente sobrescreve ela com o retorno de uma função.

$asso = new Associado();
	
$asso = $assoDAO -> pesquisaAssociadoId($empasso -> getId_associado());

Qual seria o objetivo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, pra você reproduzir o erro tem que ter o ambiente mais semelhante possível.

 

Talvez seja um erro que só ocorre quando existe mais de um valor no banco.

 

Não pude deixar de notar que nas primeiras linhas você instancia uma classe e depois simplesmente sobrescreve ela com o retorno de uma função.

$asso = new Associado();
	
$asso = $assoDAO -> pesquisaAssociadoId($empasso -> getId_associado());

Qual seria o objetivo?

 

'pesquisaAssociadoId($idassociado)' retorna um objeto Associado de acordo com o id passado por parâmetro. O método seta todas as suas características.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas não há a necessidade da primeira linha, na verdade. Porque o objeto já está vindo pelo DAO.

 

De qualquer forma, o problema ainda não foi resolvido.

 

Executou no local com mais associados cadastrados?

 

Posta a classe Associado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas não há a necessidade da primeira linha, na verdade. Porque o objeto já está vindo pelo DAO.

 

De qualquer forma, o problema ainda não foi resolvido.

 

Executou no local com mais associados cadastrados?

 

Posta a classe Associado.

Executei sim, e rodou normalmente ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez seja alguma coisa específica do seu servidor online.

Deve ter algo que está acontecendo no seu loop que está fazendo com que em determinado momento o seu associado deixe de ser um objeto.

 

Pra resolver o problema do loop, coloca um var_dump($asso) antes do primeiro getName() e isso vai te mostrar como está mapeado o objeto.

 

Aí pra cada loop você vai ver o que está contido na variável.

 

Depois posta um print.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez seja alguma coisa específica do seu servidor online.

Deve ter algo que está acontecendo no seu loop que está fazendo com que em determinado momento o seu associado deixe de ser um objeto.

 

Pra resolver o problema do loop, coloca um var_dump($asso) antes do primeiro getName() e isso vai te mostrar como está mapeado o objeto.

 

Aí pra cada loop você vai ver o que está contido na variável.

 

Depois posta um print.

 

Segue o print:

 

https://www.dropbox.com/s/vabnzqz2j8kb2m0/Vardump.png?dl=0

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse espaço não influencia?

Original:
$associado -> getNome()

$associado[ESPAÇO]->[ESPAÇO]getNome()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Roberto, pode apagar o print. Tem dados pessoais deles ali.

 

Verifica no código que foi retornado, se lá no fim não tem alguma referência a objeto nulo ou vazio.

Tem que ver se é isso que tá causando o erro. Porque aparentemente o primeiro objeto está chegando normalmente.

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.