Você está na página 1de 29
Php 15 Dicas, Boas Praticas e Fundamentos do PHP Conhega 15 Dicas, Boas Praticas e Fundamentos Para Desenvolver Scripts PHP pirate H P Seja Muito Bem-Vindo(a)! Boas Préticas de Programacio PHP 1 Utilize Sempre as Tags Completas 2. Indentagao de Cédigo, 3. FungGes para Verificar Existéncia de Variaveis © Constantes 4. Tipos de Dados @ Casting 5 Adotar Padrées para Nomes de Fungies, Classes, Constantes © Variéveis 6 Habilitar ExibigSo de Erros em Ambiente de Desenvolvimento 7 Nio ocultar erros utilizando © ([arroba]) 8 Desabilte register_globals 9 Utilizar Arquivo de Inici gio (Bootstrapping) 10 Gerenciamento de Dependéncias de Software 11 Mantenha-se Sempre Atualizado(a) 12 Comentérios © Documentagio 13 Versionamento de Cé 14 Faca Logs de Execucio 15 Use Codificacao UTF-8 Sem BOM Conclusso 15.1. Um Pequeno Favor... 15.2 Fundamentos: Por Que Insisto Tanto Nisso Pagina 10 u B 4 15 7 18 19 20 2 2 2 25 25 26 Seja Muito Bem-Vindo(a)! ‘Antes de qualquer coisa, quero te parabenizar e te agradecer! Parabéns por tomar essa iniciativa de aprender as Boas Priticas ¢ os Fundamentos sobre o PHP! Conhecer os Fundamentas é 0 que realmente destaca ¢ diferencia um Programador Profissional de um mediano, Também quero agradecer vocé por me dar esta oportunidade de conversar com voct © me apresentar melhor, além de mostrar como aprender PHP nao precisa ser um bicho de sete cabecas! Muito pelo contririo 6 muito mais simples do que muitos "professores” por af dizem! Para Quem E Este Guia? uma étima pergunta! E vamos 8 resp Este guia € para todas aqueles que querem programar em PHP de forma Profissional. Nao basta aprender a programar em PHP e achar que é suficiente Existem Boas Priticas que devem ser seguidas, se voc® quiser, realmente, se destacar da maioria, E, se voce est aqui, tenho total certeza de que vocé faz parte dessa minoria dedicada a se aperfeicaar na ‘Arte da Programagio! Parabéns novamente pela iniciativa! :) Tem muita gente por af que se diz Programador PHP, mas escreve cédigos hontvels! Vocd sera diferente! Tenho certeza disso! Vou mostrar aqui as Boas Priticas de Programacio PHP. ‘Também vou apresentar os Fundamentos principais para que vocé se tome um excelente profissional de PHP, Muitas delas podem (e devem) ser aplicadas para qualquer outra linguagem, Mas, come o objetivo aqui é © PHP, o foco seré sempre o PHP. Gusrde bem esta palaves FUNDAMENTOS. ‘So os Fundamentos do PHP que vio destacar voc8 como Profissonal. Vou falar disso mais pra frente Entdo Maos 4 Obra! Chega de papo e vamos 20 que interessa! Boas Praticas de Programasao PHP. 1 Utilize Sempre as Tags Completas 0 PHP suporta quatro tipos de tags. Sio elas: ee <7php > hw ‘A primeira forma é a padrio e preferencial, porém muitos utilzam a segunda, por ser mais curta e pritica Com ela, também é possivel usar esta sintaxe para exibir uma informagio: Listagem 2: Exibindo dados usando tags curtas t= Nelle World!* 72> J eqaivale s <7 echo "Helle Woria!"; 7 Porém, 2 utilizagio dessa tag também nio é recomendada. A disponibilidade das tags curtas pode estar desabilitada no servider, conforme o valor da diretiva short_open.tag, Se ela estiver em off, essas tags serio Jgnoradas, fazendo com que o script no sea interpretado. A terceira opeio nao & muito comum, mas néo é afetada pela diretiva shortopen_tag, sendo tio segura quanto a primeira. As tags ASP , que também devem ser evitadas, s6 serao interpretadas se a diretiva asp_tags estiver em on, 6 que & pouco comum, visto que 0 seu valor pace ¢ off. Mais detalhes podem ser vistos no link a seguir. Tags do PHP 2 Indentagao de Cédigo Indentacdo (do inglés Indent) significa manter blocos de cédigos alinhados. Ou seja, sempre que iniciar tum novo blaco, aumente @ nivel de distancia da margem esquerda, A correta indentacio facilita a organizagio © a leitura do cédigo, Vaja os seguintes exemplos ey ee [ccs © Cee Helle World ee ai(sa ce @) ¢ : : Perec st Cn ea) « echo "Helle World"; > ‘A auséncia de indentagao em um pequeno trecho de céigo, como 0 mostrado acima, pode ndo fazer muita dliferenca, Porém tente imaginar 300 ou 400 linhas sem indenta¢io. Ou pior: imagine fazer uma alterac3o em lum seript escrito nesse formato! Isso E UM TERROR! Alguns programadores iniciantes acreditam que, reduzindo © ndmero de linkas de cédigo, faciitase a navegasdo € a sua letura. Ou que um cédigo mais curto é executado mais rapidamente pela CPU. Nem um nem outro € verdade, 0 recomendado, ¢ também adotado por muitos, 6 uma indentasio de quatro espaces. Dé atencio especial as estruturas de controle, onde o “aninhamento” delas podem causar confusio de letra. era ee at(sa) Ae(3b ee $a) € Wesaige d etee € Wesaige > > ‘Agora a versio corretamente indentada ET 0 adequada sea) € arte Indentar com Espacos ou TABs? Espagos! Sim, use sempre espacos em ver de TABS. ‘Ao utilizar TABs, alguns editores de texto exibem 0 cédigo mal formatado, pois alguns consideram 0 TAB cequivalente 20 espacamento de 2, 4 ou 8 espagas. Além disso, se houver mistura de espagas e TABS, o cédigo pode parecer bem feio em determinados editores de texto, Quando copiamos eédigo de outro lugar, principalmente de sites, eles aparecem com esparos. E, se estivermos usando TABs, pode haver confltos. Se um dia voc# programar na linguagem Python, verd o problema que isso dl Python nao tem delimitador de blocos (chaves). Blocos sio delimitados pela indentagio, E espagos ¢ TABs sio considerados diferentes, ‘Se houver TAB e espaca em seu script, le nio serS executado, OK, mas este guia nlo é sobre Python, entio ‘no falarei mais que isso. -P Vocé pode configurar seu editor de textos para transformar TABs em espagos. Assim, voc® pode teclar “TAB para indentar, mas serd insetida uma sequéncia de espacos em vez de um TAB literal. Chaves na Mesma Linha ou na Linha Seguinte? Isso fica a seu ertéio, Vejamos © exemple anterior Listagem 8: C arGay € seb =2 $8) € W/ebeige deite ¢ U/c6dieo y Podemos colocar as chaves sempre na linha seguinte ar Cha) « at ($b s8 sa) « > 4 > > Note que, além de colacar as chaves na linha seguinte, eu adicione’ esparos nos i's. Ambos aspectos sio questo de preferéncia, Eu prefiro usar espagos nos it's, ubile’s etc, além de sempre colocar as chaves na linha seguinte, Mas vocé pode preferir da primeira forma, 0 PSR-1 € © PSR? sio padrées sugerides para programagio PHP, Veja mais sobre eles nos links a seguir. PSR-1: Padrlo Basico de Coclficagio PSR-2: Guia de Estilo de Codificagio 3. Fungées para Verificar Existéncia de Varidveis e Constantes E importante verificar se uma variével, constante ou mesmo chave de array existe ¢ possui valor, antes de resgatar 0 seu valor utile, Isso evita resultados inesperads © eros em tempo de execusio, Veja 0 txemplo baie Listagem 10: Usando varidveis nie inicalizadas sa = $_post(ra’): sb =" woriai"; echo $3.98 Se esse script for processado apés 0 envio de um formulirio pelo método POST, com © campo "a" definido, a varigvel $a receberd seu valor € 0 script funcionaré. Se enviarmos o valor “Hello” pelo formulério, © script exibird "Hello World’ Porém, se 0 usustio nie digitar valor no campo"a’, 0 script vai gerar um aviso do nivel E NOTICE, alertando que no existe o Indice "a" no array $_POST, gerando a saida" World” Por isso & importante verificarmos a existéncia do indice “a” no array $_POST. E & muito simples. Basta uusarmas a fungie ieset, desta forma: ee at Gasset ($posTl?a'])) sa = Spostt’a']; dotee € Bas HT; > Sos * orai®; echo $a. $b; Uma atternativa mais curta & usar © Operador Condicional Teméro, desta forma: Sa + tesee( $rostf/a'} ) 7 $.posteya’] "Hi" sb = * Woria! echo $2.9 Para © caso de constantes, usamos a funSo defined, como a seguir: Listagem 13: Verficando existéncia de constantes define ( “CAMINHO", "wxu/meudiretorio/” ) at ( detanea( “CAMINEO® ) > « echo "A constante j& foi definida.*; > « acho "A contante nie foi definida.*; > Veja mais detalhes no link a seguir Varidveis no PHP os de Dados e Ca: 1 PHP no & uma linguagem tipada. Ou seja, ndo precisamos definir os tipos das varidvels quando a definimos. Isso pode ser bom por um lado, mas muito ruim erm algumas situagées, Algumas vezes, uma varidvel gue deveria conter um niimero inteio recele uma string, ou um booleano. Iss0 nio gera erra no PHP, mas pode trazer problemas para a integridade dos dados da aplicacio, Vejamos um exemple, [une (/Rerorna ‘integer Svar = 25 Print gottype(tvar): WJRevorna | string Svar = "6": print gettype(tvar) Usamos a fungo gettype() para retomar 0 tipo de varisvel declarada, No segundo trecho temas a de- claragSo da mesma variével Svar, que passa 9 receber © tipo de varivel string, Este dado € convertido automaticamente a0 fazer ums soma, por exemplo, vltando novamente 2 ser um valor do tipo intero. Para ontornat e850 tipo de situacio e evtar surpresas,recomenda-se molar o tipo de Vardvel, também chamado de casting, assegurando que a varidvel ser8 do tipo esperado, Para isso, pode-se utilizar a funcio settype(), desta forma [JRevorna ‘integer’, meen como valor declerads cone ’string’ svar = settype(Svar, ‘integer’); prant gettype(tvar): ‘A moldagem de tipes também pode ser feits no memento da declaracio da variSvel, antecedendo 9 seu valor com 0 tipo dessjade, entre paranteses: (/vetine 0 tipo ‘integer Svar = (int) 6"; print gettype(tvaz); Mais detalhes podem ser vistos no link 2 seguir. Tipos de Dados do PHP 10 5 Adotar Padrées para Nomes de Fungées, Classes, Constantes e Variaveis ‘Adotar padrées de nomenclatura ao declarar fungdes, varisveis, constants @ classes auxilia o dasenvolvi- ‘mento. Com isso, evitam-se diividas e errs, por exempla, a0 chamar fungies que no existam, simplesmente por se ter um nome confuso ou uma falta de padrio. Voc® deve estar ciente da padronizacio que iré fazer, € respeitsla em todo o projeto. \Vejamos um exemplo. era function primeira tunesa( « 7 > function segundafuncae() « ” > Programar sem um padrio, como no exemplo acima, compromete o desenvolvimento. Dessa forma serd ‘muito facil chamar por fungles inexistentes. £ muito importante analisar os padrdes jé utilizados por outros programadores ou desenvelver seu préprio padrSo e segui-lo 3 risca, garantind um projeto claro e consistence Essa mesma situagio pode ser enfrentada para nomes de constantes, varidveis ou classes. Por isso, & importante seguir um padrio, como o exemplo a seguir. eee Svar = 75 SaishaVar = “PHP; define ( "CONSTANT", "Valor da constante” ): define ( “SEGUNDA_CONSTANTE", 100); function minhaFuncac( fargumente } « print "$argumento"; > classe Minhaclasse « public function nonellerede () « U/ smplonentacao > > Para o nome de variSves, prefir utilizar nomes sempre em mindsculas. Para variéveis com palavras com- pstas, separe-as alterando as palavras seguintes com letra inicial maiiscula (técnica chamada de CamelCase), Nomes de constantes preferencialmente devem ser declarados em maiisculas, utilzando underline (‘") ul como separador de palavras. As fungdes e seus argumentos, assim como as classes e seus métodos, devern ser declaradas utilizando-se © ‘mesmo padio para as variiveis. Como forma de aiferenciar as clases de funcSes, estas devem ter seus nomes com 3 inicial também em maidscula, Mais detalhes e padres sugeridos podem ser vistos no link a seguit PSR-2: Guia de Estilo de Codificagio 2 6 Habilitar Exi i¢ao de Erros em Ambiente de Desenvolvimento © PHP & uma linguagem muito fiexivel. Isso, pra variar, tem seus lados postivos e negatives. Uma das coisas que 0 PHP permite fazer & esconder mensagens de erro, Sabe quando vocé vai impar a casa ¢ joga a poeira embaixo do tapete? E feio fazer isso, né? Poie &. E esconder erras € tio feio quanto isso Por isso € muito importante manter a exibigso de todas as mensagens de erro durante o desenvolvimento do seu projeto, As mensagens de erro te ajudam a melhorar seu cédigo, encontrar os problemas e corrg-las. Existem duas diretivas do php.ini que sio responsiveis por exibir os erros: display. zox_reporving. AA primeira & simples: recebe valor 0 (erros desativados) ow 1 (erros ativades). A segunda recebe valores que variam conforme os nivels de erros que desejamos exibir. O ideal € exibir todos os niveis de erros ¢ alertas, Pata isso, podemos fazer 0 seguinte ene ) « ervider exit( "Erre ae co tar con 0 Banco de dados MySQL" } > Considerando-se que os argumentos da funcdo mysqli_connect() acima estejam corratos, erros de co- exo tornam-se uma exceeo, como em caso de servidor fora do ar. A partir do PHP 5, & possivel manusear erros por meio de Excerdes, mas esse tema nio seré abordado neste guia. Nota importante: 0 operador de controle de erro “®” sempre desativa mensagens de erro, mesmo para lerros critics, que terminam a execugao de scripts, Além de outras coisas, ist significa que se voct usar "®” para suprimir e parar exatamente aj, sem nenhuma indicacio do motivo da interrupcao. 35 de cersas funeées ¢ elas nio estiverem disponiveis ou com tipas incorretes, 0 script vai Vela mais detathes no link a seguir Operadores de controle de erro ul 8 Desabilite register_globals A register_globals 6 uma diretiva que passou a estar desabiltada (Off), por padrdo, a partir do PAP 4.2.0, Ela, quando habilitada no php. ini, faz com que as variéveis globais sejam registradas (inicializadas) diretamente no script er execusio. Eke ee ed yi : 1: Li 2) ‘ ‘Ii ‘); Neste exemplo fica clara 2 brecha de seguranca, Basta inicializar a varvel Susuario_autenticads como verdadeira (true) a0 acessar o script para que a pagina secreta esteja disponivel, burlande a funcie de verificagio de autenticacio do ususrio. Se o atacante descobrir o nome dessa varigvel, basta ele passar 0 valor ‘true pela URL, assim: site. con/pagina. php?usuario_autenticadostrue. Pronto. Ele seré considerado um usustio logado, Para cotrgir este problema, basta inicalizar a varidvel com @ valor false. Além de uma boa pritica, previne que 0 valor seja “forcado" a ser verdadeito. 1|// Inictalszande a vartével fusuas 277 cono saise, evitands gue a regiscer gl. o_autenticade als 15 tertira ne cédige Suruario sucenticads = flee; at ( usuarielegadeQ ) « Susuarie_autenticade = crue: > st ( $usuarie_avtenticads ) « include "pagina secreta. phe"; > else « print “Vecd née tem pernissie." > Se vocd use PHP 5.4 ou superior, nfo precisa se preocupar com registe: existe mais! _globals, pois ela nem sequer Isso equivale a dizer que ela esté desativada, como é 0 recomendado, ‘A maiora j6 deve usar PHP 5.4 ou superior, mas preferi inclu esta Boa Prética neste guia, principalmente por questies histéricas, jé que essa ditetiva existiu por muito tempo e causou muitas discusses. Mais detalhes podem ser lidos neste lnk: Usando a diretiva Register Globals 16

Você também pode gostar