Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde galera!
Estou iniciando em Programação Orientada a Objetos.
O aproveitamento de código é muito significativo.
Apesar de estar curtindo tudo isso, tenho uma dúvida.
Criei o arquivo "Lib.class.php" e criei "class Lib".
Dentro desta Classe, estou inserinho vários métodos que preciso no meu dia a dia.
Exemplos de métodos que criei:
| * AntiSqlInjection($sql) -> Verifica Tentativa de SQL Injetion
| * AntiXSS($string) -> Elimina tags HTML e PHP
| * GeraURLAmigavel($string) -> Transforma titulo em URL Amigável
| * Encriptar($senha, $salt=false) -> Codificando a senha | 40 caracteres
| * VerificaEmail($mail) -> Verificaçăo do e-mail com checagem de dns
| * RedimensionarVideoEmbed($code_embed, $nova_largura, $nova_altura) - > Altera a altura e largura da exibição do vídeo
| * ConverteData($data, $formato) -> Converte uma data para o padrão nacional ou americano
| * ComparaDatas($data_final, $data_inicial) -> Verifica se a DataFinal é maior que a DataInicial
| * AddDayIntoDate($date,$days) -> Adicionar dias a uma determinada data
| * subDayIntoDate($date,$days) -> Subtrai dias a uma determinada data
| * MesPorExtenso($mes) -> Transforma o mes para extenso. Ex: 10 = Outubro
| * ListarArquivosFTP($diretorio=false) -> Exibe a lista de diretórios e arquivos de um determinando endereço
| * UploadArquivos($nome_campo, $destino, $tipo_arquivo=false, $peso_maximo=10485760) -> Upload de qualquer arquivo
| * MetaDataImage($imagem) -> Lê os cabeçalhos EXIF de um arquivo de imagem JPEG ou TIFF
| * RedimensionarImagem($imagem, $origem, $destino, $nova_largura, $nova_altura, $qualidade=100) -> GIF, JPG, PNG
O arquivo já está com mil linhas e vai crescer ainda mais, pois novos métodos irão entrar nele.
A minha questão é se quanto a maneira mais correta de se criar classes.
É certo eu criar uma classe com mil linhas ou melhor eu dividir esta classe em várias outras, mais específicas, e separá-las em outros arquivos php.
Para ser mais claro deixe-me dar um exemplo.
Tenho um método de 10 linhas, que está dentro de uma classe de mil linhas o qual será acessado diversas vezes pelos meus scripts.
Caso eu criar uma nova classe apenas com este método de 10 linhas e ainda colocar ele em um arquivo php, o processamento será melhor ou igual ao arquivo anterior?
Outra coisa, só para manter um padrao defina o seu padrao e evite nomes em ingles e nomes em portugues, escolha 1 tipo e use sempre o mesmo.
outra coisa de uns nomes melhores que definam com mais facilidade o metodo por exemplo:
ConverteData se o Objeto é "Data" entao o metodo poderia ser "Converter", "Comparar"
se o Objeto é Email: "Verificar", "Enviar"
Na verdade cada função que você citou deveria ser uma classe diferente.
Exemplo:
verificador_sqli.php -> classe que gera um objeto verificador de sql injection
O que esse objeto faz?
analiza_url(); //Método 1
remove_aspas(); //Método 2
Eu (particularmente) imagino o objeto como se fosse um eletrodoméstico, um objeto real que realiza funções para mim.
Daí cada objeto será como um módulo e conforme você for precisando você vai encaixando os módulos.
Se você jogar tudo dentro de uma única classe quando instanciar vai carregar na memória coisas que você não vai usar.
Bom, também sou iniciante em POO, se eu estiver errado me corrijam, mas acho que é isso.
William, Fabyo e Gustavo, muito obrigado pelas dicas.
Realmente colocando os objetos todos na mesma classe vira uma bagunça.
Entendi que cada método tem que ser algo intima-mente ligado com a classe em questão.
Acredito que fiz desta forma porque, particularmente, estou tendo muitas dificuldades em utilizar os esquemas de herança.
Também noto que na hora em que eu for usar métodos de classes diferentes, terei que incluir todas as classes no meu código.
Da forma que eu estava fazendo, precisaria chamar um único arquivo o "Lib.class.php", porém como já foi falado aqui, eu estaria carregando na memória várias linhas sem a necessidade.
Caso vocês tenham alguns links ou mesmo dicas sobre POO, favor passar.
Quando me refiro a dicas, não digo parte técnica, pois isso tem muito na net.
Me refiro ao método/conceito em se criar classes e métodos.
Vou dar um exemplo: "Quais classes tem que ser usadas como herança?"
Entende? Tenho dificuldade mais da parte conceitual, pois a parte técnica em si já entendi.
Novamente muito obrigado!
Acredito que fiz desta forma porque, particularmente, estou tendo muitas dificuldades em utilizar os esquemas de herança.
Existem outras formas que não a herança. desde o type-hinting por classes concretas ou por interfaces (polimorfismo) até atribuição de um objeto à uma propriedade de uma classe.
Também noto que na hora em que eu for usar métodos de classes diferentes, terei que incluir todas as classes no meu código.
Estude sobre autoload. Faz verdadeiras maravilhas. :D
Da forma que eu estava fazendo, precisaria chamar um único arquivo o "Lib.class.php", porém como já foi falado aqui, eu estaria carregando na memória várias linhas sem a necessidade.
Esse nem o maior problema. Imagina quando der problema nessa classes, quantas tempo você não vai perder até achar o culpado.
Ou pior, imagina você programando nessa única classe, dá uma queda de força, seu editor é bruscamente interrompido.
Pelo recurso de reabrir os últimos documentos em uso, um cache é usado. Por ter sido encerrado inapropriadamente, o cache é corrompido e todo o trabalho perdido. :o
Já sofri com isso, tanto quando usei o Dreamweaver até hoje em que uso o Zend Studio.
>
Caso vocês tenham alguns links ou mesmo dicas sobre POO, favor passar.
Quando me refiro a dicas, não digo parte técnica, pois isso tem muito na net.
Me refiro ao método/conceito em se criar classes e métodos.
Vou dar um exemplo: "Quais classes tem que ser usadas como herança?"
Até onde eu sei, os conceitos são bem abordados por Design Patterns.
Tem dois aqui nos meus Favotiros: Giorgio Sironi e PHP5DP
você não está trabalhando com objetos então.
digamos que cada classe deva tratar de um unico assunto.
oque tem a ver: AntiSqlInjection() com RedimensionarImagem() ?
até ai, não há diferença nenhuma entre ter uma class gigante dita OO, e ter um arquivo com functions.
parece que você entendeu o principio de 'reaproveitamento'(encapsular em functions), mas não entendeu o principio de orientação a objetos(partes independentes de um sistema que conversam entre si).
Sugiro refatorar essa 'class'
se você tiver um projeto, em que não precise de redimensionar imagens, terá nessa class várias linhas de código inútil aquele projeto, entendeu ?