Ir para conteúdo

POWERED BY:

Arquivado

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

leo_SJCampos

Obter objeto como retorno de um metodo

Recommended Posts

Olá pessoal. estou com um problema...

 

Estou precisando criar um metodo para setar valores em um objeto, e o mesmo retornar.

 

Até ai tudo bem...

 

Acontece que no arquivo que eu vou chamar esse metodo, ele não esta trazendo nada.. vejam se estou fazendo alguma coisa errada.

 

Valeu pessoal..

 

       function obterUsuario(){
           $u = new Usuario;
           $u->setNome("Leonardolima");
           return $u; 
       }  

 

ai em outro arquivo, instancio a classe Usuario, chamo o metodo obterUsuario e chamo o getNome

 

$usuario = new Usuario();
$usuario->obterUsuario();
echo $usuario->getNome(;

 

to fazendo alguma errada?

Compartilhar este post


Link para o post
Compartilhar em outros sites

siim.

 

sabe que o conceito de Orientado a Objeto é fazer com que nossos problemas virtuais passem a ser "Reais" e com isso desenvolver soluções baseadas nesse dados.

 

recentemente um amigo nosso deu um exemplo bacana.

 

era um Objeto(classe) que seria PORTA

 

e nele existem propriedades e métodos(funções), você precisa saber distinguir quando é método e quanto é função, algumas vezes podemos trabalhar de forma em que usamos as 2 lado a lado.

 

o seu exemplo por exemplo seria

 

Class Usuario{
 private $nome;

public function setNome($nome){
  $this->nome = $nome;     
}  

public function getNome(){
  return $this->nome;
}

}

 

veja bem o seu objeto usuário tem uma propriedade pois cada usuário tem um nome, depois esse objeto recebe um método que diz que vamos dar um nome ao Usuário, essa função pega a propriedade nome e da um valor pra ela afinal deixamos ele vazio.

 

depois ele simplesmente retorna isso.

 

ai como você chama

 

$usuario = new Usuario;
$usuario->setNome("Luiz Vinicius");
echo $usuario->getNome();

 

criamos a instancia do objeto setamos o nome no método e recuperamos outro método que recebe nossa propriedade setada?

 

desculpa eu não sou muito técnico, deu pra pegar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu por responder brother... mas estou fazendo exatamente isso que você fez.. só esqueci de colocar a classe usuario aqui no post.. la tem o metodo setNome()

 

   public function setNome($nome) {
       $this->nome = $nome;
   }

 

só que o GET dele, nao esta trazendo nada.. entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro esta aqui

 

  function obterUsuario(){
           $u = new Usuario;
           $u->setNome("Leonardolima");
           return $u; 
       }  

 

para acessar uma propriedade do seu objeto não é necessário instanciar de novo, basta usar $this que se refere ao proprio objeto, igual fiz no exemplo

Compartilhar este post


Link para o post
Compartilhar em outros sites

é que é assim mano... eu poderia fazer isso que você esta fazendo se eu utilizasse o obterUsuario como um metodo da classe usuario... mas minha classe usuario só tem metodos get e set, então pra não misturar, eu tenho uma classe DAO, que faço as outras operações INSERT, DELETE, UPDATE, Listar etc...

 

Ai pensei em utiliza-la para setar valores no Usuario toda vez que eu criar uma instancia dessa classe DAO, poderia ser até no construtor isso... entendeu agora?

 

Ai utilizei esse obterUsuario.

 

       function obterUsuario($id_usuario){
           $u = new Usuario;
            //...
            //...Operacoes da funcao

           $u->setNome("Leonardo de lima");
       }  

 

dentro da classe DAO...

 

Quando eu instanciar o DAO automaticamente eu vou ter a classe usuario preenchida com os valores, e assim ficaria mais facil eu recuperar esse valores no controller entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho ainda que esta se perdendo no que é o OO

 

seria algo como isso

 

Class Usuario{
private $nome;
private $email;

public function setNome($nome){
	$this->nome = $nome;
}

public function getNome(){
	return $this->nome;
}

public function setEmail($email){
	$this->email = $email;
}

public function getEmail(){
	return $this->email;
}
}

Class teste{
public function obterUsuario(Usuario $usuario){
	return "Meu nome é ".$usuario->getNome()." e meu email é ".$usuario->getEmail();
}
}

$usuario = new Usuario;
$usuario->setNome("Vinicius");
$usuario->setEmail("vinicius@teste.com.br");
$teste = new teste;
echo $teste->obterUsuario($usuario);

 

sua função obterUsuario do objeto teste seria dependendo de um objeto Usuario.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu tentar clarificar o que o Vinicius disse.

 

Vamos do ponto mais básico: OOP Object Oriented Programming (Programação Orientada a Objetos)

 

Porque eu destaquei a última palavra?

 

Uma classe representa o objeto e suas especificações. Mas você não usa uma classe, você usa uma instância dela.

 

Cada instância representa um objeto.

 

Percebeu a diferença?

 

Para essa classe:

 

class Door {

   private $material;

   public function setMaterial( $material ) {

       $this -> material = $material;
   }

   public function describe() {
       echo sprintf( 'The door is made of %s', $this -> material );
   }
}

Quando você instancia a classe você tem:

 

$door = new Door;

$door -> setMaterial( 'Metal' );

$door -> describe(); // The door is made of Metal

$door -> setMaterial( 'Wood' );

$door -> describe(); // The door is made of Wood

O que aconteceu aqui? Você criou uma porta e definiu que ela seria de Metal.

 

Então, você inventou um re-molecularizador subatômico (:lol:) e transformou o Metal em Madeira (Wood).

 

Apesar da piada, isso aconteceu a partir da mesma variável, do mesmo objeto anteriormente criado. Durante a requisição em que esta variável existir, daí em diante toda vez que Door::describe() for invocado, o material exibido será Madeira (Wood).

 

Agora veja seu código e veja o que você mesmo escreveu:

 

function obterUsuario(){

   $u = new Usuario;

   $u->setNome("Leonardolima");

   return $u; 
}

Salientemos bem que, do jeito que está, isso é função. Um método também é uma função, porém dentro do escopo de um objeto.

 

Essa função instancia um objeto Usuario, define seu nome e retorna o objeto.

 

Isso significa que toda e qualquer operação que você queira fazer com esse Usuario deve ser feita sobre a variável à qual foi atribuído o retorno dessa função, assim:

 

$userData = obterUsuario();

var_dump( $userData -> getNome() ); // Leonardolima

Supondo, é claro, que a classe Usuario tenha um método getNome().

 

Resumindo...

 

Tudo aquilo que você fizer com a instância de um objeto valerá unicamente para aquele objeto.

 

$usuario = new Usuario();
$usuario->obterUsuario();
echo $usuario->getNome(;

A partir do momento que você tem um novo new, você tem uma nova instância e, mesmo que o nome seja idêntico, você tem, de fato, outro objeto e por isso que o nome anteriormente setado não funciona.

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.