Jump to content
Sign in to follow this  
Michel Frade

Ajuda com Métodos Get & Set

Recommended Posts

Pessoal, boa tarde.

 

Estou com a seguinte dúvida, eu tenho uma classe com um atributo, métodos get e set, e dois outros métodos, eu tento usar o set no primeiro método e o get no segundo, mas não me retorna nada, pra ser mais claro vou mostrar um script genérico, simples de entender.

<?php
	
	class Exemplo{
		
		private $atributo;
		
		public function setAtributo($atributo){
			$this->atributo = $atributo;
		}
		public function getAtributo(){
			return $this->atributo;
		}
		
		public function metodoA(){
			$this->setAtributo("Valor Qualquer");
		}
		
		public function metodoB(){
			return $this->getAtributo();
		}
		
	}

E tento recuperar o dado em outra página com o seguinte código:

<?php

include_once 'teste.class.php';

$obj = new Exemplo();
echo $obj->metodoB();

Mas não retorna nada.

Alguem sabe o que se passa?

 

Eu só consigo retornar na outra página se eu fizer o set e o get no mesmo métodoB...to achando que tem algo a ver com escopo.

Share this post


Link to post
Share on other sites

Amigo... essas 3 linhas que você postou não definiram nenhum valor à propriedade atributo, o que significa que atributo possui valor nulo (você não chamou o set, apenas o get... e o seu atributo não tem nenhum valor padrão).

 

Se você quer exibir alguma coisa, primeiro você precisa escrever o valor dessa coisa.

 

Ao invés de usar "echo $obj->metodoB();", experimente "var_dump( $obj->metodoB() );".

Vai continuar exibindo nada, mas pelo menos vai aparecer isso pra vc.

  • +1 1

Share this post


Link to post
Share on other sites

Amigo... essas 3 linhas que você postou não definiram nenhum valor à propriedade atributo, o que significa que atributo possui valor nulo (você não chamou o set, apenas o get... e o seu atributo não tem nenhum valor padrão).

 

Se você quer exibir alguma coisa, primeiro você precisa escrever o valor dessa coisa.

 

Ao invés de usar "echo $obj->metodoB();", experimente "var_dump( $obj->metodoB() );".

Vai continuar exibindo nada, mas pelo menos vai aparecer isso pra você.

Matheus, essas 3 últimas linhas, se vc observar é como se fosse um segundo arquivo....chamando o arquivo com os códigos acima, com uma instancia da classe anterior. Como eu disse o exemplo é genérico, esses códigos não sao os que tenho em mãos, só quis facilitar a leitura do código, pq afinal não tenho dúvida no código, tenho no funcionamento. E eu atribuí o método set dentro do código do primeiro arquivo, dentro do métodoA.

 

Obrigado pela sua resposta.

Share this post


Link to post
Share on other sites

Tudo bem, mas note o seguinte:

$obj = new Exemplo();
echo $obj->metodoB();

Aqui você instanciou um novo objeto da classe Exemplo. Partindo daqui, o atributo foi zerado e não possui valor (mesmo que, em outro objeto, você tenha definido algum valor).

Por isso praticamente não faz diferença o que você faz no arquivo que foi incluído...

 

Outro ponto é que foi uma convenção cada classe estar presente em um arquivo class.php, o que me induziu a pensar que naquele arquivo você tinha somente a classe que você postou. Essa convenção não é mais comumente utilizada.

 

Edit: Não sei se consegui te ajudar, mas sem o código ou uma dúvida concreta fica difícil adivinhar o que está acontecendo. É melhor que você poste o código com problemas, para que possamos lhe ajudar.

Edited by Matheus Tavares

Share this post


Link to post
Share on other sites

Tudo bem, mas note o seguinte:

$obj = new Exemplo();
echo $obj->metodoB();

Aqui você instanciou um novo objeto da classe Exemplo. Partindo daqui, o atributo foi zerado e não possui valor (mesmo que, em outro objeto, você tenha definido algum valor).

Por isso praticamente não faz diferença o que você faz no arquivo que foi incluído...

 

Outro ponto é que foi uma convenção cada classe estar presente em um arquivo class.php, o que me induziu a pensar que naquele arquivo você tinha somente a classe que você postou. Essa convenção não é mais comumente utilizada.

 

Edit: Não sei se consegui te ajudar, mas sem o código ou uma dúvida concreta fica difícil adivinhar o que está acontecendo. É melhor que você poste o código com problemas, para que possamos lhe ajudar.

Entendi o que vc quis dizer, mas uma coisa agora me intrigou...tenho visto que na maioria dos sites recomendam separar a classe...como vc me falou q n tem sido muito usado comumente, como seria o mais indicado?

 

Obrigado novamente.

Share this post


Link to post
Share on other sites

Não não... eu deveria ter me expressado melhor: era comum anteriormente cada classe estar em um arquivo chamado nome_da_classe.class.php, como no seu exemplo.

 

Hoje em dia é comum o nome do arquivo ser o mesmo que o nome da classe. Ex: Classe Foo, arquivo Foo.php

 

Mas sempre, cada classe/interface/trait/etc em um arquivo, e nada mais que uma classe/[...] em um arquivo (se estamos falando de orientação a objetos, é claro).

 

Leia mais a respeito aqui: http://www.php-fig.org/psr/

Share this post


Link to post
Share on other sites

Michel, por favor, da uma estudada nesta página toda:

http://www.php-fig.org/psr/psr-2/#4-classes-properties-and-methods

 

Ela vai guiá-lo sobre como escrever suas classes de uma forma muito interessante

 

Exemplo:

/*
* Não recomendado
*/
class ClassName{ // <<-
    
}

/*
* Recomendado
*/
class ClassName
{ // <<-
    
}


/*
* Métodos
* Não recomendado
*/
class ClassName{
    public function methodName(){// <<-
        
    }
}

/*
* Recomendado
*/
class ClassName
{
    public function methodName($arg1, $arg2)
    { // <<-
        
    }
    
    /*
    * Exemplo com muitos argumentos
    */
    public function methodNameTwo(
        $arg1, // <<-
        $arg2,
        $arg3,
        $arg4,
        $arg5
    ) {
        
    }
}

Respeito esse estilo a um ponto que escrevo do mesmo jeito em JAVA, JavaScript e outras.

Share this post


Link to post
Share on other sites

Michel, por favor, da uma estudada nesta página toda:

http://www.php-fig.org/psr/psr-2/#4-classes-properties-and-methods

 

Ela vai guiá-lo sobre como escrever suas classes de uma forma muito interessante

 

Exemplo:

/*
* Não recomendado
*/
class ClassName{ // <<-
    
}

/*
* Recomendado
*/
class ClassName
{ // <<-
    
}


/*
* Métodos
* Não recomendado
*/
class ClassName{
    public function methodName(){// <<-
        
    }
}

/*
* Recomendado
*/
class ClassName
{
    public function methodName($arg1, $arg2)
    { // <<-
        
    }
    
    /*
    * Exemplo com muitos argumentos
    */
    public function methodNameTwo(
        $arg1, // <<-
        $arg2,
        $arg3,
        $arg4,
        $arg5
    ) {
        
    }
}

Respeito esse estilo a um ponto que escrevo do mesmo jeito em JAVA, JavaScript e outras.

 

 

Não não... eu deveria ter me expressado melhor: era comum anteriormente cada classe estar em um arquivo chamado nome_da_classe.class.php, como no seu exemplo.

 

Hoje em dia é comum o nome do arquivo ser o mesmo que o nome da classe. Ex: Classe Foo, arquivo Foo.php

 

Mas sempre, cada classe/interface/trait/etc em um arquivo, e nada mais que uma classe/[...] em um arquivo (se estamos falando de orientação a objetos, é claro).

 

Leia mais a respeito aqui: http://www.php-fig.org/psr/

Obrigado senhores, há pouco comecei um estágio e não tenho muita prática ainda com orientação a objetos, to tentando aprender na unha....as dicas de vcs foram valiosíssimas, obrigado.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By k9studio
      Olá Amigos,
      tenho essa tabela abaixo e estou apanhando para listar os dados e fazer validação,
      alguém pode ajudar como chamar os dados e validar mostrar o nome somente se estiver visible=on  

       
      CREATE TABLE `system` (   `namesystem` text COLLATE utf8_unicode_ci NOT NULL,   `setting` text COLLATE utf8_unicode_ci NOT NULL,   `value` text COLLATE utf8_unicode_ci NOT NULL,   `order` int(1) NOT NULL,   KEY `namesystem_setting` (`namesystem`(32),`setting`(32)),   KEY `setting_value` (`setting`(32),`value`(32)) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; como os dados estão na tabela:
       
      namesystem setting   value   order (honda)    (name)   (Honda)   1 (honda)    (xtts)   (ok)      0    (honda)   (visible)  (on)      0    (toyota)    (name)   (Toyota)  2 (toyota)    (xtts)   (ok)      0    (toyota)  (visible)  (on)      0    
    • By iguulima
      É possivel realizar uma consulta SQL em duas colunas da mesma tabela usando outra função que não seja o AND ou OR? Segue o meu Select ate agora:
       
      (SELECT * FROM product WHERE comid = $idcom AND status = 'Ativo' AND categ = $category AND nameprod like'%$search%'  ORDER BY id DESC)  
      Por exemplo se eu colocar um AND após buscar o nameprod, no nome do produto não tiver a palavra chave ele também não irá buscar. Ou se colocar um OR ele anulo as outras condições até onde eu sei.
      Iniciante em programação.
    • By fideles
      Caros,
       
      Venho por uma duvida que esta cruel comigo. Explico-lhes.
       
      Tenho um banco de dados contendo exatas 4 colunas (id, codigo, descricao, quantidade) e criei um relatorio no excel que me separa os codigos, neste caso seria 3 abas pq tenho somente 3 codigos internos (S = Solicitar, F = Forneceder, B = Baixado) e criei uma select com GROUP By codigo
       
      Ai no banco eu posso ter 30 codigos com S, 10 com F e 15 com B,
      SELECT * FROM solicitacoes WHERE n_solicitacao = '".$n_solicitacao."' GROUP BY codigo Acontece que essa instrução acima, lista somente a primeira linha de cada codigo, como que eu faço neste caso para ele listar todos codigos? Exibir no caso os 30 codigos com S, os 10 com F e os 15 com B ? 
       
      Estou comendo algo ou meu raciociono esta totalmente equivocado ?
       
    • By Carlos Longo
      Srs Bom dia,
       
      fiz inumeras tentativas para mostrar a imagem com link em:
       <script type="text/javascript"> var imagens =  new Array( '1.jpg', '2.jpg', '3.jpg','4.jpg', '5.jpg', '6.jpg'); var num_img = 6; var img_atual =0; function ChangeImg() { if (img_atual < (num_img - 1) ) { img_atual = img_atual + 1; } else { img_atual = 0; } document["img_apoio"].src = "http://www.ficasimples.com.br/calcfal/prop/" + imagens[img_atual]; var x = setTimeout ("ChangeImg()", 2000); }   </script>  
      ela posteriormente é chamada assim:
      queria que ao clicar na figura fosse chamado o link da figura especifica conforme valor da variavel  imagens[img_atual]/////
      <img name="img_apoio" src="http://www.ficasimples.com.br/calcfal/prop/1.jpg" alt="" border="0"width="190px" height="210px" align="center">  
       
      poderiam me ajudar??
       
      grato
       
      Carlos
    • By iguulima
      Bom dia a todos, tenho em meu banco de dados uma tabela de pedidos, onde nesse pedidos estão salvos as id's dos produtos que foram selecionados pelo usuário, gostaria de saber se tem alguma forma utilizando um while que possa selecionar os produtos mais pedidos dessa tabela, não tenho ideia por onde começar. Consigo listar todos apenas mas não sei como selecionar os que são mais pedidos.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.