leooizepi 1 Denunciar post Postado Maio 5, 2010 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
William Bruno 1501 Denunciar post Postado Maio 5, 2010 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
Evandro Oliveira 331 Denunciar post Postado Maio 5, 2010 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
leooizepi 1 Denunciar post Postado Maio 5, 2010 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
Evandro Oliveira 331 Denunciar post Postado Maio 5, 2010 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
leooizepi 1 Denunciar post Postado Maio 5, 2010 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