Ir para conteúdo

POWERED BY:

Arquivado

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

AnarcoDionisio

Return não funciona em clase orientada a objetos OOP

Recommended Posts

Olá pessoal, enfrentei um problema agora que não encontrei nenhuma referência na internet, um comportamento estranho de uma classe minha no return.

 

pra ficar mais facil de perguntar vou exemplificar com uma classe bem simples.

<?php
class teste 
{
public $var;
	public function teste()
	{
		$this->var = (string) '125';
		return $this->var;
		
	}
}

bem.. nesse caso está escrito no php manual que o comando return encerra imediatamente a execução da função atual e retorna o valor desejado.. então teoricamente se eu chamasse essa classe assim:

 

<?php
include('classTeste.php');
$teste = new teste();
var_dump($teste);

o var_dump deveria retornar uma string com valor '125'. Mas não é o que acontece.. ele retorna um Objeto da Classe Teste;

 

e ai ? alguem já enfrentou isso ?

 

a título de curiosidade.. o seguinte comando funciona:

 

<?php
class teste 
{
public $var;
	public function teste()
	{
		$this->var = (string) '125';
		return $this->var;
		
	}

	public function __toString() {
        return $this->var;
    }

}

Mas nesse caso ela funciona por causa do método magico __toString() que automaticamente converte uma chamada do objeto em string.. mas.. enfim.. não era pra esse return estar retornando '125' ??

 

obrigado ai..

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que quando você utiliza um método com o mesmo nome da classe, ele é tratado como construtor. O construtor não retorna uma string, e sim uma instância do objeto.

 

class teste 
{
		public $var;
        public function testeOutro()
        {
                $this->var = (string) '125';
                return $this->var;               
        }
        
}
$teste = new teste();
$teste = $teste->testeOutro();
var_dump($teste);

Assim você terá o retorno esperado.

 

Carlos Eduardo

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.