Resolvendo problemas estranhos com o error_reporting(E_ALL);

Novembro, 14 2007

Seu código não está funcionando?

O resultado do cálculo está errado?

coloque o  error_reporting(E_ALL); no início do seu script

Execute esse script sem usar o error_reporting(E_ALL);
<?php
$var = 4 * $num;
echo $var;
?>
O resultado será 0 (zero)! Sem erro nenhum!

Agora experimente colocar error_reporting(E_ALL);
<?php
error_reporting(E_ALL);
$var = 4 * $num;
echo $var;
?>
O PHP retornará um erro dizendo que a variável $num não foi iniciada.

Isso é só um exemplo do que o error_reporting(E_ALL); pode fazer por nós!


Vinte e cinco dicas de performance para PHP

Novembro, 13 2007

Esta é uma compilação de material traduzido de algumas pesquisas feitas no google.

  1. se um método pode ser static, declare-o como static. Isso irá aumentar a performance umas 4 vezes.
  2. echo é mais rápido do que print
  3. utilize o unset nas suas variáveis para liberar memória (bons tempos em que todo mundo sabia programar em C :P .. “free your mallocs”)
  4. não use require_once()
  5. utilize o caminho absoluto na hora de dar os includes, assim o PHP não perde tempo tentando resolver o caminho.
  6. str_replace é mais rápido do que preg_replace porém strtr é umas 4 vezes mais rápido do que str_replace
  7. utilizar @ para suprimir os erros é muito lento.
  8. habilite o mod_deflate no apache
  9. feche a sua conexão com o banco se você não irá mais utilizá-la (mas não fique abrindo e fechando toda hora!)
  10. $row['abc']  é 7 vezes mais rápido do que $row[abc]
  11. não use funções dentro de um laço, como por exemplo, for ($x=0; $x < count($array); $x++)  porque count() vai ser executada em todo ciclo do laço. Utilize: for ($x=0, $c=count($array); $x < $c; $x++).
  12. Incrementar uma variável global é duas vezes mais lento do que incrementar uma variável local
  13. acessar um atributo de um objeto ($obj->atributo++, por exemplo) é 3 vezes mais lento do que acessar uma variável local
  14. incrementar uma variável local não inicializada é 9-10 vezes mais lento do que se ela tivesse sido inicializada.
  15. aspas simples são mais rápidas que aspas duplas
  16. uma aplicação que faça cache dos scripts php vai aumentar a performance entre 25 e 100%.
  17. utilize cache sempre que possível. SEMPRE! (claro que isso tem um onus, mas estamos falando apenas em performance aqui)
  18. Se quiser testar o tamanho de uma string, utilize isset ao invés de strlen. Por exemplo: if (!isset($foo{5})) echo “foo eh mto pequeno!”;
  19. nem tudo precisa ser OO. Métodos e objetos tendem a consumir muito mais memória.
  20. não converta toda estrutura de dados em classes. Utilizar arrays é muito mais rápido.
  21. se você possui funções que demandam muito tempo de execução cogite transforma-las em uma extensão em C.
  22. habilitar o mod_gzip pode economizar em até 80% o tráfego de dados. Sua largura de banda agradece.
  23. evite usar SELECT *. Isso dificulta a manutenção e gasta tempo desnecessário de processamento para descobrir os campos e obter os valores do banco
  24. use switch ao invés de um monte de ifs
  25. json é mais rápido do que xml.

Diferença entre require(), require_once(), include, include_once()

Novembro, 11 2007

Pô, quando eu comecei a programar em PHP eu não sabia qual era a diferença dessas funções, e achei a minha resposta com muito esforço. Então aí vai, rapidinho, quanl a diferença.

include(): Tenta incluir uma página. Caso de algum erro, o script retorna um warning (aviso) e prossegue com a execução do script. Aceita a passagem de variáveis (GET) na string. Pode ser utilizado em uma estrutura de condicionais que terá seu efeito perpetuado todas as vezes que for chamado.

Require(): Tenta incluir uma página. Caso de algum erro, o script retorna um fatal error(erro fatal) (Que maravilha!) e aborta a execução do script. Aborta mesmo, já era não roda nada mais dali pra frente. Não aceita a passagem de variáveis (GET) na string. Não recomendo que utilizem nas estruturas condicionais, a menos que se deseje o seu efeito, de ser executada apenas uma vez.

include_once() e require_once(): Idênticas as suas funções simples, porém se o arquivo referenciado já foi incluso na página anteriormente, a função retorna ‘false’ e o arquivo não é incluido. É bom quando temos muitos includes e já estamos perdidos, sem saber o que está incluindo o que.


Qual a diferença entre aspas e apóstrofo? Ou aspas simples e aspas duplas?

Novembro, 11 2007

Aspas duplas: fazem pre-processamento das váriaveis.
Ex:

$var = "olá mundo";
echo  "Resposta: $var"

Resultado:

Resposta: olá mundo

Aspas simples: não fazem pre-processamento das váriaveis.
Ex:

$var = "olá mundo";
echo  "Resposta: $var"

Resultado:

Resposta: $var

Então? Otimize seu código, quando você estiver certo de que não ira ter váriaveis dentro das aspas use aspas simples, assim o PHP não irá ficar procurando váriaveis para pre-processar.