ScornInPC 1 Denunciar post Postado Dezembro 29, 2007 Olá imasters, Vim aqui hoje postar um artigo que escrevi sobre algumas técnicas (melhores ou não) que facilitam na velocidade da programação, ou simplesmente deixam o código mais limpo. Gostaria de deixar claro, que todas as dicas no artigo, não tecnicas usadas por mim, e não são padrão nenhum, e talvez não seja a melhor forma, mas deixo aberto para uma discussão saudavel. - Algumas considerações Sei que com este artigo, não vou conseguir mostrar e fazer o pessoal migrar completamente ao PHP 5. Mas, é necessário, gostaria que o pessoal que estivesse aprendendo agora, utilizassem o poder da orientação objeto, utilizassem mais a rica documentação (online ou não) da linguagem. Digo isso, por que não é muito raro, ver posts com $HTTP_GET_VARS, ou não usar nada disso. Não é raro ver pessoas não definindo constantes, criando scripts complexos, sem precisar. Primeiramente, sempre é bem-vindo, uma verificação de parâmetros if(isset($_GET['nome'])) { $nome = $_GET['nome']; } else { $nome = NULL; } O mesmo vale para os métodos POST, FILES e outros. Este é um dos maiores problemas de migração de servidores, ja que eles mostram mensagens de warnning, quando as variaveis não estão definidas. E aproveitando o mesmo script, largamos para traz o metodo $HTTP_GET_VARS, trazendo o $_GET. Outra coisa, que ficaria difícil explicar em um pequeno artigo como esse, seria a orientação objeto, nada complexo, mas pelo menos usar o conceito objeto. - Identação e PHP dentro de HTML É de extrema importância uma boa identação, tanto na parte do PHP, quando no HTML. Um exemplo pode ser visto: Exemplo I <html> <head> </head> <body> <?php if($LOGADO) { ?> <table> <tr> <td> <?php echo $USUARIO; ?> </td> <td> Seja bem vindo novamente. </td> </tr> </table> <?php } else { ?> <table> <tr> <td> Sai fora ô </td> </tr> </table> <?php } ?> </body> </html> Exemplo II <html> <head> </head> <body> <?php if($LOGADO) { ?> <table> <tr> <td> <?php echo $USUARIO; ?> </td> <td> Seja bem vindo novamente. </td> </tr> </table> <?php } else { ?> <table> <tr> <td> Sai fora ô </td> </tr> </table> <?php } ?> </body> </html> No exemplo I, alem de ficar simples a leitura, quando o script for executado, no codigo fonte da pagina, o html ficará bem legivel. - Identação e HTML dentro de PHP Precisamos sempre manter nosso HTML identado, precisamos então, tomar alguns cuidados, como as quebras de linha Exemplo I <html> <head> </head> <body> <?php if($LOGADO) { echo " <table> <tr> <td> ". $USUARIO ." </td> <td> Seja bem vindo novamente. </td> </tr> </table> "; } else { echo " <table> <tr> <td> Sai fora ô </td> </tr> </table> "; } ?> </body> </html> Exemplo II <html> <head> </head> <body> <?php if($LOGADO) { echo "<table> <tr> <td>" . $USUARIO . "</td> <td>Seja bem vindo novamente.</td> </tr> </table>"; } else { echo "<table> <tr> <td>Sai fora ô</td> </tr> </table>"; } ?> </body> </html> - printf() e um pouco mais de identação Em exemplos pequenos como esses, talvez seja difícil perceber a diferença, mas quando trabalhamos com formulários e JavaScript, talvez fique complicado achar um problema, fazendo-nos recorrermos à saida do código no browser, e imagina achar um erro em algo complexo. Vou citar mais um exemplo, de como eu faço quando preciso mostrar saidas de repetições. Exemplo I <html> <head> </head> <body> <table> <tr> <?php while ($linha = mysql_fetch_array($res) { print (" <td> <a href=\"editar.php?id=%d\">%s</a> </td> ", $linha['id'], $linha['nome']); } ?> </tr> </table> </body> </html> Exemplo II <html> <head> </head> <body> <table> <tr> <?php while ($linha = mysql_fetch_array($res) { echo "<td><a href=\"editar.php?id=" . $linha['id'] . "\">" . $linha['nome'] . "</a></td>"; } ?> </tr> </table> </body> </html> Nestes exemplos, fica mais fácil mostrar a dificuldade de uma leitura de código, ja que no exemplo II, é quase impossível compreender o que o echo faz, só de "bater o olho". Execute os script acima, e veja o código fonte gerado, e perceba a diferença. - Arquivos de inicialização e configuração Geralmente, em nossos scripts, precisamos criar constantes, variáveis globais, incluir classes, e varias outras coisas. Quando o script é muito grande, muitas vezes nos perdemos ao meio de tantas variáveis, constantes e classes. Uma dica, é criar um arquivo de configuração, geralmente chamado config.php, mais ou mesmo com o seguinte formato. <?php $banco = array(); $banco['servidor'] = 'localhost'; $banco['usuario'] = 'root'; $banco['senha'] = 'senha'; $banco['nome'] = 'artigo'; $upload = array(); $upload['caminho'] = 'fotos/'; $upload['tamanho'] = 500; if ?> Costumo iniciar minhas variáveis sempre que possível, ja que sou acostumado à programar em outras linguagens, mas o array() não é obrigatório. Tendo nosso arquivo de configuração, crio sempre um arquivo de inicialização, geralmente chamado init.php, com o seguinte formato. <?php /* * Definição dos erros */ set_ini('display_errors', true);error_reporting(E_ALL | E_STRICT); ini_set('display_errors', true); /* * Definição da codificação */ header("Content-Type: text/html; charset=UTF-8", true); /* * Verifica a existencia do arquivo de configuração */ if(!file_exists("config.php")) { die("Impossivel encontrar o arquivo de configuração"); } require_once("config.php"); /* * Verifica e incluir outras classes e arquivos */ if(!file_exists("....php")) { die("Impossivel encontrar o arquivo de ..."); } require_once("....php"); /* * Define as constantes do banco de dados */ if(!defined("BD_SERVIDOR")) { define("BD_SERVIDOR", $banco['servidor']); } if(!defined("BD_USUARIO")) { define("BD_USUARIO", $banco['usuario']); } if(!defined("BD_SENHA")) { define("BD_SENHA", $banco['senha']); } if(!defined("BD_NOME")) { define("BD_NOME", $banco['nome']); } if(!defined("UPLOAD_CAMINHO")) { define("UPLOAD_CAMINHO", $upload['caminho']); } if(!defined("UPLOAD_TAMANHO")) { define("UPLOAD_TAMANHO", $upload['tamanho']); } ?> Se voce trabalha com skins, arquivos de linguagens, erros pré-definidos, e muitas outras coisas, este arquivo facilita muito. É neste arquivo que ficará todas as coisas que os scripts utilizarão Algumas vezes, me deparei com alguns dizendo que o script não precisaria toda hora ficar carregando classes, ou constantes que não fossem utilizadas, mas eu particularmente, não acho isso um problema, já que um script de 14k seria lido pelo interpretador quase instantaneamente. Templates Vejo sempre pessoas se matando por causa de templates, mas, ja pensou em passar por parâmetro qual pagina o usuário quer ver? Pensando em algo assim: <html> <head> </head> <body> <table> <tr> <td>Cabeçalho</td> </tr> <tr> <td> <table> <tr> <td>Menu</td> <td>Conteudo</td> </tr> </table> </td> </tr> <tr> <td>Rodape</td> </tr> </table> </body> </html> Tendo o template em mãos, podemos fazer nosso conteudo dinamico, assim: <?php require_once('init.php'); /* * Se o parametro $_GET['pagina'] estiver * definido, pega o arquivo à incluir */ if(isset($_GET['pagina'])) { switch($_GET['pagina']) { case 'inicio': $pagina = 'index.php'; break; case 'clientes': $pagina = 'clientes.php'; break; default: $pagina = '404.php'; } } else { /* * Se o parametro $_GET['pagina'] não existir * o usuario digitou, por exemplo, http://meusite.com.br/ * então o site deve mostrar o index.php */ $pagina = 'index.php'; } ?> <html> <head> </head> <body> <table> <tr> <td>Cabeçalho</td> </tr> <tr> <td> <table> <tr> <td> <a href="?pagina=inicio">Inicio</a><br /> <a href="?pagina=clientes">Clientes</a> </td> <td> <!-- Conteudo incluso --> <?php include($pagina); ?> <!-- Conteudo incluso --> </td> </tr> </table> </td> </tr> <tr> <td>Rodape</td> </tr> </table> </body> </html> Bem, é isso pessoal, duvidas ou alguns problemas, só postar que eu escrevo mais sobre o assunto =) Editado: v0.2 Compartilhar este post Link para o post Compartilhar em outros sites
Skyo 1 Denunciar post Postado Dezembro 29, 2007 Interessante e, com certeza, além de técnicas e praticas, entra a questão do habito, programar com clareza e de forma organizada trás praticidade ao manusear o código. Tomar isso como hábito é necessário. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 29, 2007 Boa, Scorn!! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Não é $HTTP_VARS_GET, mas, sim, $HTTP_GET_VARS, mas isso não importa, pois ela já não deve ser usada desde o PHP 4. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif É horrível ver scripts com identação mal feita. Espero que todos agora comecem a deixar os scripts legíveis e organizados. :D Compartilhar este post Link para o post Compartilhar em outros sites
ScornInPC 1 Denunciar post Postado Dezembro 29, 2007 uaeuaheuhae beraldo, pra você ver como é antigo =), vou trocar la entaum =) valeu pelos comentarios ^^ Compartilhar este post Link para o post Compartilhar em outros sites
okrek 0 Denunciar post Postado Dezembro 30, 2007 http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Parabens, material de grande valor, será minha salvação. Compartilhar este post Link para o post Compartilhar em outros sites