Ir para conteúdo

POWERED BY:

Arquivado

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

Aprendiz CSS

Orientação a Objetos PHP

Recommended Posts

Bom dia

 

Gostaria de saber se o código abaixo esta correto no que diz respeito a programação PHPOO

 

Comentários sobre melhorias e correções são bem vindos

 

class Cliente {

	private $codCliente;
	private $nomeCliente;
	private $codInstalacao;
	private $nomeBD;
	private $usuarioBD;
	private $senhaBD;

	public function getCodCliente(){
		return $codCliente;
	}
	public function getNomeCliente(){
		return $nomeCliente;
	}
	public function getCodInstalacao(){
		return $codInstalacao;
	}
	public function getNomeBD(){
		return $nomeBD;
	}
	public function getUsuarioBD(){
		return $usuarioBD;
	}
	public function getSenhaBD(){
		return $senhaBD;
	}

	public function setCodCliente($codCliente){
		$this->codCliente = $codCliente;
	}
	public function setNomeCliente($nomeCliente){
		$this->nomeCliente = $nomeCliente;
	}
	public function setCodInstalacao($codInstalacao){
		$this->codInstalacao = $codInstalacao;
	}
	public function setNomeBD($nomeBD){
		$this->nomeBD = $nomeBD;
	}
	public function setUsuarioBD($usuarioBD){
		$this->usuarioBD = $usuarioBD;
	}
	public function setSenhaBD($senhaBD){
		$this->senhaBD = $senhaBD;
	}


}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fazer getters e setters não é programar em OO.

 

Oque você quer fazer com essa classe ? oque esse objeto faz ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

é mesmo, percebi isso quando fui testar

 

muito obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem muito sentido manter as propriedades privadas e trabalhar com get e set se não for feita nenhuma validação nos dados dentro dos sets, já que qualquer coisa que o cara colocar você só vai adicionar o valor. A idéia do set e manter as propriedades como privadas é justamente ter controle sobre o tipo de dado que será colocado. Por exemplo, $codCliente. Existe alguma lógica para este código? Tem que ser número ou pode ter letras? Tem quantidade mínima de caracteres? Máxima?

 

Se não for validar nada em nenhum dos campos (o recomendado é validar), utilize as propriedades públicas e retire os sets e gets.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fazer getters e setters não é programar em OO.

 

Oque você quer fazer com essa classe ? oque esse objeto faz ?

 

 

Não tem muito sentido manter as propriedades privadas e trabalhar com get e set se não for feita nenhuma validação nos dados dentro dos sets, já que qualquer coisa que o cara colocar você só vai adicionar o valor. A idéia do set e manter as propriedades como privadas é justamente ter controle sobre o tipo de dado que será colocado. Por exemplo, $codCliente. Existe alguma lógica para este código? Tem que ser número ou pode ter letras? Tem quantidade mínima de caracteres? Máxima?

 

Se não for validar nada em nenhum dos campos (o recomendado é validar), utilize as propriedades públicas e retire os sets e gets.

 

Carlos Eduardo

 

esta classe em especifico apenas receberá valores do banco de dados e estes serão usados em outra parte do sistema.

 

Mas pensando no que diz respeito a validação.

 

Vamos imaginar que o codCliente só deva receber valores numericos e acima de 3 casas decimais.

 

proceduralmente eu faria da seguinte forma:

 

if ( is_numeric($codCliente) && strlen($codCliente) >= 3 ) {
				//valor valido
			}

Como eu poderia banir do valor ser setado e mostrar o erro ao usuário?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

algo assim..

 

$valor = null;
if ( is_numeric($this->codCliente) && strlen($this->codCliente) >= 3 ) {
                               $valor = $this->codCliente;
                        }else{
throw new Exception('Erro: Valor do Codigo do cliente é Invalido.');
}

return $valor
entao na hora de usa-lo

 

try{
//script
}catch(Exception $E){
 echo $E->getMessage();
} 

valww

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta classe em especifico apenas receberá valores do banco de dados e estes serão usados em outra parte do sistema.

 

PDO é a melhor saída.

 

Formule a sua classe designando as propriedades e os métodos de aplicação e modificação. Desnecessário o uso de setters já que a PDO vai inserir os dados diretamente no nome das propriedades (quando possível).

 

exemplo rápido:

class aluno {
    private $numero;
    public $nome;
    public $sexo;
    private $nascimento;

    public function getAge(){
        // monta uma matriz contendo a data de nascimento e o dia de hoje
        $datas = array(
            'nascimento' = explode('/',date('d/m/Y',$this->nascimento)),
            'hoje' = explode('/',date('d/m/Y'))
        );
        // conflita os anos, checagem de idade primária
        $anos = $datas['hoje'][2] - $datas['nascimento'][2];
        
        // verifica se o mês de aniversário já passou
        if($datas['hoje'][1] < $datas['nascimento'][1]) return $anos;

        // verifica se estamos no mês de aniversário e se já passamos ou estamos no dia de aniversário
        elseif($datas['hoje'][1] == $datas['nascimento'][1] && $datas['hoje'][0] >= $datas['nascimento'][0])
            return $anos;

        // caso as duas checagens falhem, o aniversário ainda não passou
        else return --$anos;
}

Para este exemplo funcionar, o campo `nascimento` tem que ser guardado como integer timestamp.

 

$sgdb = new PDO('mysql:host=localhost;dbname=escola_exemplo','root','');
$stmt = $sgdb->prepare('SELECT * FROM `alunos`');
$classe = $stmt->fetchAll(PDO::FETCH_CLASS,'aluno'); // classe é um array de objetos de classe 'aluno';

foreach($classe as $aluno){
    $artigo = ($aluno->sexo == 1)? 'o': 'a';
    echo "{$artigo} alun{$artigo} {$aluno->nome} tem ".$aluno->getAge()." anos.<br />\n";
}

 

Edit

 

 

Vamos imaginar que o codCliente só deva receber valores numericos e acima de 3 casas decimais.

public function setCodCliente($codigo){
    if($codigo < 100) throw new Exception('mensagem de erro');
    else $this->CodCliente($codigo);
}

...
...


$cliente = new Cliente();
try { $cliente->setCodCliente($_POST['codigo']); }
catch(Exception $e) { die($e->getMessage(); }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi nada que você disse Evandro Oliveira

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi nada que você disse Evandro Oliveira

 

http://php.net/manual/en/book.pdo.php

 

depois que aprender como a classe funciona, dê uma atenção especial a este método:

http://www.php.net/manual/pt_BR/pdostatement.fetchall.php

 

alternativa:

http://www.php.net/manual/en/pdostatement.fetchobject.php

 

 

mais exemplos para facilitar a compreensão:

http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem muito sentido manter as propriedades privadas e trabalhar com get e set se não for feita nenhuma validação nos dados dentro dos sets, já que qualquer coisa que o cara colocar você só vai adicionar o valor.

Se não for validar nada em nenhum dos campos (o recomendado é validar), utilize as propriedades públicas e retire os sets e gets.

 

isso que o carlos falou é verdade ter um atributo com visibilidade private e um metodo set vazio não serve pra nada.

 

olha esse exemplo:

A classe pessoa tem o atributo sexo e um metodo set responsavel por receber um parametro do tipo char (M,F) e atribuir o valor do sexo por extenso(Masculino,Feminino) ao atributo sexo da classe pessoa. Olha como ficaria:

Class Pessoa
{
private $sexo;

Function setSexo($sexo)
{
	if ($sexo = 'm')
	{
	$this->sexo = "Masculino";
	}
	Else
	{
	$this->sexo = "Feminino";
	}
}

}

 

claro que esse é um exemplo bem fraquinho , mas já serve pra você ter uma ideia de como aprimorar os seus metodos setters e getters.

 

espero ter ajudado, um abraço.

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.