Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, é a primeira vez que eu escrevo um código em php orientado a objetos! Gostaria de sugestões e críticas, sobre o meu código, para que eu possa melhorá-lo! Obrigado!
<?php
class ValidarCadasttro {
/* private $ne;
private $mail;
private $pass;
private $nc;
private $cpf;
private $end;
private $tel;
private $cel;
private $fax;*/
public function validarEmail($mail){
if(!preg_match("/[A-Za-z0-9_.-]+@([A-Za-z0-9_]+\.)+[A-Za-z]{2,4}/", $mail)){
return false;
}
}
public function validarCPF($cpf){
/*Funcao retirada de wikipedia.org --> Verificar depois se está correta!*/
// remove os caracteres não-numéricos
$cpf = preg_replace('/\D/', '', $cpf);
// verifica se a sequência tem 11 dígitos
if (strlen($cpf) != 11)
return false;
// calcula o primeiro dígito verificador
$sum = 0;
for ($i = 0; $i < 9; $i++) {
$sum += $cpf[$i] * (10-$i);
}
$mod = $sum % 11;
$digit = ($mod > 1) ? (11 - $mod) : 0;
// verifica se o primeiro dígito verificador está correto
if ($cpf[9] != $digit)
return false;
// calcula o segundo dígito verificador
$sum = 0;
for ($i = 0; $i < 10; $i++) {
$sum += $cpf[$i] * (11-$i);
}
$mod = $sum % 11;
$digit = ($mod > 1) ? (11 - $mod) : 0;
// verifica se o segundo dígito verificador está correto
if ($cpf[10] != $digit)
return false;
// está tudo certo
return true;
}
//CRIAR OS METODOS DE VALIDACAO DO TELEFONE, CELULAR E ETC...
}
?>
Obrigado!
EDIT: Sei que é pequeno ainda, mas quero saber o que acham! Obrigado!
OOP não é bem assim não.
sua classe está correta, mas não faz muito sentido, pense em OOP sempre como orientado a modelo, assim:
se você tem um objeto Usuario, você terá uma classe Usuário, esta classe terá todas as funcionalidades pertinentes a ele, inclusive as validações e isto para cada Objeto do seu modelo (Produto, Estoque, ...)
outra coisa importante é, estude MVC, pois toda aplicação fica melhor de manter quando dividindo-a em camadas.
existem classes utilitárias também, estas possuem funções estáticas para poder usar sem necessidade de instanciar o objeto, normalmente usadas para conversões ou formatações.
a camada de banco de dados possui normalmente suas classes também, inclusive, no padrão DAO Factory você tem uma classe DAO para cada objeto do modelo.
minha crítica é mais para futuros estudos seus, pois como você está no início tudo isto é bem difícil de entender, apesar de fácil de implementar.
boa sorte com os estudos.
se você tem um objeto Usuario, você terá uma classe Usuário, esta classe terá todas as funcionalidades pertinentes a ele, inclusive as validações e isto para cada Objeto do seu modelo (Produto, Estoque, ...)
Discordo.
Um Usuário PODE TER um CPF. Antes de atribuir a informação ao objeto Usuário uma Validação deve ocorrer, mas não responsabilidade da classe Usuário validar.
Nesse ponto o falcao está correto.
outra coisa importante é, estude MVC, pois toda aplicação fica melhor de manter quando dividindo-a em camadas.
Calma, calma. Primeiro ele tem de aprender Orientação a Objetos para não ir enfiando qualquer código dentro de uma class e acharque tá certo.
Primeiro engatinha pra depois andar.
existem classes utilitárias também, estas possuem funções estáticas para poder usar sem necessidade de instanciar o objeto, normalmente usadas para conversões ou formatações.
Você sabe MESMO qual a diferença de um método/propriedade estático para um não estático?
Eu demorei a entender isso também, mas não tem nada com necessidade de instanciar.
prefiro não misturar documentos com o cadastro do usuario
um documento como cpf é válido somente no brasil.
o green card somente nos eua..
jidousha menkyou-sho(licensa de motorista) somente no japao...
imagine essa classe usuario para um serviço global/internacional
class usuario{
function cpf
function greencad
function ....
}
o melhor seria uma classe propria e organizada inclusive por regiões
class brazil_documents{
function cpf
}
class usa_documents{
function greencard
}
class colombia_documents{
function coca
}
eu vi uma classe simples, nao vi nenhum conceito, por mais basico, conceito do oo..
outra coisa importante é, estude MVC, pois toda aplicação fica melhor de manter quando dividindo-a em camadas.
eu creio que MVC não é como se fosse regra para se programar, o ideal seria dar todos os caminhos para aprender o PHP o OO.
além de estudar arquitetura MVC procure outros jeitos de se construir como por exemplo sistema de templates que eu acho muito bom.
Eu não entendi pq as propriedades estão comentadas. :unsure:
De qualquer forma, está meio sem sentido, pq?
Pq um objeto VALIDAÇÃO CADASTRO possui email, pass, nc, etc??? Essas propriedades não são de um USUÁRIO?
Vamos colocar de outra forma:
class Usuario {
private $ne;
private $mail;
private $pass;
private $nc;
private $cpf;
private $end;
private $tel;
private $cel;
private $fax;
// Aqui vão os setters e getters
}
Para a validação:
class ValidarCadastroUsuario {
private $usuario;
public function __construct(Usuario $usuario) {
$this->setUsuario($usuario);
}
public function setUsuario(Usuario $usuario) {
$this->usuario = $usuario;
}
public function validarEmail(){
if(!preg_match("/[A-Za-z0-9_.-]+@([A-Za-z0-9_]+\.)+[A-Za-z]{2,4}/", $this->usuario->getEmail())){
return false;
}
}
public function validarCPF(){
/*Funcao retirada de wikipedia.org --> Verificar depois se está correta!*/
// remove os caracteres não-numéricos
$cpf = preg_replace('/\D/', '', $this->usuario->getCpf());
// verifica se a sequência tem 11 dígitos
if (strlen($cpf) != 11)
return false;
// calcula o primeiro dígito verificador
$sum = 0;
for ($i = 0; $i < 9; $i++) {
$sum += $cpf[$i] * (10-$i);
}
$mod = $sum % 11;
$digit = ($mod > 1) ? (11 - $mod) : 0;
// verifica se o primeiro dígito verificador está correto
if ($cpf[9] != $digit)
return false;
// calcula o segundo dígito verificador
$sum = 0;
for ($i = 0; $i < 10; $i++) {
$sum += $cpf[$i] * (11-$i);
}
$mod = $sum % 11;
$digit = ($mod > 1) ? (11 - $mod) : 0;
// verifica se o segundo dígito verificador está correto
if ($cpf[10] != $digit)
return false;
// está tudo certo
return true;
}
//CRIAR OS METODOS DE VALIDACAO DO TELEFONE, CELULAR E ETC...
}
Agora sim, estamos começando a pensar em Orientação a objetos.
Eu não entendi pq as propriedades estão comentadas.
parece que ele desistiu no caminho de usar.
Eu estava em dúvida se eu ia usar essas propriedades e como eu já havia escrito elas, eu resolvi comentar, caso eu resolvesse usá-las! Eu não uso essas propriedades porque eu mando para os métodos o valor que eu recebo do formulário através de $_POST!
Não entendi muito bem essa parte do código:
<?php
private $usuario;
public function __construct(Usuario $usuario) {
$this->setUsuario($usuario);
}
public function setUsuario(Usuario $usuario) {
$this->usuario = $usuario;
}
?>
Pode me explicar por favor?
O que teria na classe Usuario?
Eu criei essa classe pra validar o cadastro!
Obrigado!
bacana cara, eu costumo fazer essas validacoes em javascript, mas sao necessarias server-side tbm