Em Busca da “Zend PHP Yellow Pages”
Posts tagged php básico
Erros – parte III – Erros de manipulação
Jan 15th
Seus scripts devem sempre ser capazes de recuperar de um erro, mesmo que esse erro seja apenas para informar o usuário do ocorrido. Desta forma, o script não irá finalizar inesperadamente, resultando em melhor comunicação com os usuários e evitando possíveis problemas.
Felizmente é muito fácil o tratamento do erro. Seus scripts podem declarar uma função “pega tudo”, que será chamada a função set_error_handler() pelo PHP quando uma condição de erro ocorrer, veja o exemplo abaixo:
$oldErrorHandler = ’’;
function myErrorHandler ($errNo, $errStr, $errFile, $errLine, $errContext) {
logToFile(“Erro $errStr no arquivo $errFile na linha $errLine”);
// Chame o oldErrorHandler
if ($oldErrorHandler) {
$oldErrorHandler ($errNo, $errStr, $errFile, $errLine, $errContext);
}
}
$oldErrorHandler = set_error_handler ($oldErrorHandler);
Como você pode ver, o nome da função do antigo manipulador de erros (se houver) será retornado pela chamada para set_error_handler(), pois isso permite-lhe juntar diversos tratadores de erro uns em cima dos outros, tornando assim possível ter dierentes funções tratando diferentes tipos de erros.
É importante manter em mente que seu manipulador de erro será completamente derivado do PHP. Assim o mecanismo de erro que será responsável por lidar com todos os erros, e parar a execução do script, se necessário.
A partir do PHP5, set_error_handler () suporta um segundo parâmetro que permite que você especifique os tipos de erros que um manipulador especial é responsável pela captura. Este parâmetro tem os mesmos valores constantes como o error_reporting () function.
Erros – parte II – Reportando Erros
Jan 14th
Depois de uma longa temporada sem escrever, estou retornando aos estudos, pois no fim de ano sabe como é? Muito trabalho e muita cerveja.
Por padrão, o PHP reporta qualquer erro que encontra na saída do script. A menos que você esteja em ambiente de depuração, sendo essa uma característica que raramente você vai querer pois ao exibir os erros dos seus scripts para os usuários, poderia ser gerado um grande problema de segurança.
Felizmente, várias diretivas de configuração podem ser ajustadas no arquivo php.ini, informando como e quais os erros serão relatados. Os mais importantes são error_reporting, display_errors e log_errors.
A directiva Error_reporting determina quais os erros são reportados pelo PHP. Por exemplo, o seguinte permite a comunicação de todos erros, exceto avisos:
error_reporting=E_ALL & ~E_NOTICE
Comunicação de erro também pode ser alterado dinamicamente a partir de dentro de um script chamando a
função error_reporting().
As diretivas display_errors e log_errors podem ser usadas para determinar como erros são relatados. Se display_errors está ligada, os erros são reportados quando ocorrem nos scripts. De modo geral, isso não é desejável em um ambiente de produção, porque todos serão capazes de ver os erros dos seus scripts. Sob essas circunstâncias, você vai querer ligar o log_errors, irá gerar um log com os registros de erros do servidor.
Operadores – parte VII – Operadores de comparação
Jul 31st
São operadores que estabelecem uma relação de equivalência entre dois valores. Eles tanto podem determinar se dois valores são iguais (ou não iguais) entre si, ou se um é maior (ou menor) do que o outro. O resultado de uma operação comparação é sempre um valor Booleano.
Existem quatro operadores de equivalência:
| == | Equivalentes. Verifica se os dois operandos são equivalentes, o que significa que eles podem ser convertidos para o tipo de dados comum que eles têm o mesmo valor, mais não necessariamente do mesmo tipo. |
| === | Identidade. Verifica se os operandos possuem o mesmo Tipo e têm o mesmo valor. |
| != | Não Equivalentes. Verifica se os dois operandos são não equivalentes, sem verificar o seu tipo. |
| !== | Operador não-idênticos. Verifica se os dois operandos não possuem o mesmo tipo de dados ou não têm o mesmo valor. |
É muito fácil confundir o operador de atribuição (=) pelo operador de comparação (==) e este é, na verdade, um dos erros mais comuns na programação. Uma solução parcial para este problema é utilizar um padrão de projetos em que o programador inverte a ordem de seus operandos quando se compara uma variável com valor. Por exemplo, em vez de:
echo $a == 10;
Você poderia escrever:
echo 10 == $a;
Estas duas operações são totalmente idênticas, mas, devido à esquerda operador ser um valor, se tivesse esquecido de um dos sinais iguais, o parser teria jogado um erro, assim, alertando-o para o seu erro.
Outros conjuntos de diferentes operadores estabelecem uma relação de desigualdade entre os dois operandos, ou seja, se um dos dois é maior do que o outro:
| < | Retorna true se o operando da esquerda for menor que o da direita. |
| <= | Retorna true se o operando da esquerda for menos ou igual ao da direita. |
| > | Retorna true se o operando da esquerda for maior que o da direita. |
| >= | Retorna true se o operando da esquerda for maior ou igual ao da direita. |
Embora o processo seja claro para os números, as coisas mudar um pouco para outros tipos de dados, por exemplo, strings são comparadas através da análise do valor binário de cada byte na seqüência até dois valores diferentes são encontrados, o resultado é então determinado pelo valor numérico desses dois bytes. Por exemplo:
$esquerda = “ABC”;
$direita = “ABD”;
echo (int) ($esquerda > $direita);
O código acima imprime 0 (ou seja, falso), porque a letra D é mais elevado na variável da direita, do que na letra C da variável da esquerda. Enquanto você pode poderia pensar que esta comparação ocorre por causa da ordem alfabética. Considere, os seguintes exemplos:
$esquerda = ’maça’;
$direita = ’Maça’;
echo (int) $esquerda > $direita;
Neste exemplo será impresso 1 (verdadeiro), pois o valor ASCII do caractere “a” é 97 que por sua ver é mais elevado que o caractere “A” que é 65.
OBS: A utilização de operadores comparação com arrays também introduz um conjunto de regras diferentes. Veremos mais adiante.