Ir para conteúdo

POWERED BY:

Arquivado

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

leooizepi

[Resolvido] Criação de Classe

Recommended Posts

Bom dia galera!

 

Estou começando a desenvolver classes para meu sistema, visando mudar tudo para POO, mais estou bem no começo disso!

 

Fiz uma classe da minha tabela rh_funcionarios, e queria algumas dicas para melhorar essa minha classe. Por exemplo, na minha class quando ela é instanciada eu to pegando campo por campo e adicionando o valor a minha variavel, só que tem um problema(eu axo), essa minha tabela tem 80 campos, vou ter que fazer essas atribuições para todos os campos? tem algum jeito mais pratico? e se for adicionado um novo campo, ou retirado tenho q mudar a classe toda vez? essas são algumas duvidas que gostariam que me ajudassem a melhorar!

 

 

rh_funcionarios.class.php

<?php

// Meu banco ainda nao esta em Class
require_once('../../banco.php');

class rh_funcionarios {

	private $nome;
	private $cc;
	private $telefone;
	private $ramal;
	private $usuario;		
	public 	$existe = true;
	
	function __construct($filial, $matricula) {
		
		$sql 		= "SELECT 
							* 
						FROM 
							rh.rh_funcionarios 
						WHERE 
							RH_FILIAl 			= '".$filial."'
							AND RH_MATRICULA 	= '".$matricula."'";
		$sql_result = mysql_query($sql) or die ('Erro');
		
		if(mysql_num_rows($sql_result) == 0)
			$this->existe = false;
		
		$row 		= mysql_fetch_array($sql_result);
		
		$this->nome 	= $row["RH_NOME"];
		$this->cc		= $row["RH_CC"];
		$this->telefone = $row["RH_FONE"];
		$this->ramal	= $row["RH_RAMAL"];
		$this->situacao	= $row["RH_SITUACAO"];
	
	}	
	
	public function getRH_NOME() {
		return $this->nome;
	}
	
	public function getRH_CC() {
		return $this->cc;
	}
	
	public function getRH_FONE() {
		return $this->telefone;
	}
	
	public function getRH_RAMAL() {
		return $this->ramal;
	}
	
	public function getRH_SITUACAO() {
		return $this->situacao;
	}
	
	public function getExiste() {
		return $this->existe;
	}
	
}

valeu galera, abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa minha tabela tem 80 campos,

 

Se puder postar a estrutura dessa tabela, ou indentificar oque seria cada um desses 80 campos, será bom, pois está 'meio estranho' isso..

 

já viu sobre Normalização de Dados ?

Com um banco mal modelado, toda a aplicação se torna ruim e mais difícil de programar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode utilizar-se de magic methods

 

class MyHugeClass {
   private $storage = array();

   public function __call($name, $args){
       if(substr($name,0,4) == 'set_') {
           $param = substr($name,4);
           $this->storage[$param] = $args[0];
       }
       elseif(substr($name,0,4) == 'get_') {
           $param = substr($name,4);
           return $this->storage[$param];
       }
   }
}

 

ou ainda definir getters e setters genéricos

 

class MyHugeClass {
   private $storage = array();

   public final function set($param,$value){
       $this->storage[$param] = $value;
   }

   public final function get($param){
       return $param;
   }
}

 

prefiro o segundo método, fica mais limpo. Magic methods foram criados para facilitar e auxiliar, mas se você se prender muito a eles, pode perder o controle da estrutura.

 

aplicando validações no segundo método

 

class MyHugeValidClass {
   private $storage = array();
   private $dataType = array(
       'nome'=>'string',
       'idade'=>'int',
       'sexo'=>'string',
       'nascimento'=>'int'
   );

   public function set($param,$value){
       if(in_array($param,array_keys($this->dataType))) {
           settype($value,$this->dataType[$param]);
           $this->storage[$param] = $value;
       }
       else trigger_error("Campo desconhecido: {$param}.", E_USER_NOTICE);
   }
}

 

Edit

 

Andei lendo o manual com carinho e encontrei uma forma mais prática:

 

class MyHugeValidClass {
   private $storage = array();
   private $dataType = array(
       'nome'=>'string',
       'idade'=>'int',
       'sexo'=>'string',
       'nascimento'=>'int'
   );

   public function __set($param,$value){
       if(in_array($param,array_keys($this->dataType))) {
           settype($value,$this->dataType[$param]);
           $this->storage[$param] = $value;
       }
       else trigger_error("Campo desconhecido: {$param}.", E_USER_NOTICE);
   }

   public function __get($param){
       return $this->storage[$param];
   }
}

$a = new MyHugeValidClass();
$a->nome = 1;
var_dump($a->nome); // string(1) "1"

Compartilhar este post


Link para o post
Compartilhar em outros sites

William Bruno:

Entao, nessa tabela tem de tudo do funcionario, CIDADE, BAIRRO, CPG, RG, SALARIO, TIPO_SNGUE, NRO_ODONTO, etc... tudo que você imaginar tem.. rs

É então ai nós não temos um banco Modelado, e nem Relacionado com nada, mais em breve estaremos reestruturando o banco!

Peguei algumas coisas de Normalizção de Dados, não tinha estudado isso, mais vou me aprofundar, por enquanto tenho q mexer no banco assim mesmo!

 

Valeu Obrigado

 

 

Evandro Oliveira:

Gostei do Segundo metodo, fiz a implementação aqui, fico assim:

<?php

require_once('../../banco.php');

class rh_funcionarios {
	
	private $storage 	= array();    
	private	$existe 	= true;
	
	
	function __construct($filial, $matricula) {
		
		$sql 		= "SELECT 
							* 
						FROM 
							rh.rh_funcionarios 
						WHERE 
							RH_FILIAl 			= '".$filial."'
							AND RH_MATRICULA 	= '".$matricula."'";
		$sql_result = mysql_query($sql) or die ('Erro');
		
		if(mysql_num_rows($sql_result) == 0) {
			$this->existe = false;
			exit;
		}
		
		$row = mysql_fetch_object($sql_result);		
		foreach($row as $key => $value) {
			$this->set($key, $value);			
		}
	
	}	
	
	public final function set($param,$value){        
	
		$this->storage[$param] = $value;    
	
	}    
	
	public final function get($param){        
	
		return $this->storage[$param];    
	
	}
	
	
}



?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

as diferenças entre o uso do segundo e do terceiro método estão na atribuição de valores:

 

segundo:

 

$a = new classe();
$a->set('campo','valor');

 

 

terceiro:

 

$a = new classe();
$a->campo = 'valor';

Compartilhar este post


Link para o post
Compartilhar em outros sites

uhum, certo, entendi Evandro, muito obrigado!!

 

parabens!! valeu!! até a proxima!!

 

as diferenças entre o uso do segundo e do terceiro método estão na atribuição de valores:

 

segundo:

 

$a = new classe();
$a->set('campo','valor');

 

 

terceiro:

 

$a = new classe();
$a->campo = 'valor';

 

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.