PHP é à quinta-feira – Um debug mais prático
Hoje apresento-vos uma função que uso para fazer debugs, obviamente um pouco alterada porque, como muitas outras funções que aqui mostro, está integrada numa classe.
Por omissão, ela só é activada definindo a constante _DEBUG_ para 1, mas também é possível fazer uma simples adaptação para funcionar por “níveis”, ou seja, o output do debug seria diferente para _DEBUG_ 1, 2, 3, etc., funcionando quase como que por importância.
Fica como exercício para esta semana proporem essa adaptação 😉
function debug($var,$title='') { # Output da variável if (defined(_DEBUG_) && _DEBUG_ == 1) { # Se for array ou objecto, o output é feito com o título que foi atribuído antes e só depois a formatação. if (is_array($var) || is_object($var)) { # Imprime o título se este foi definido, de forma visível, ou seja, forçando fundo branco e texto preto. if (!empty($title)) echo '<h3 style="font-family: Arial; font-size: 13px; text-align: center; font-weight: bold; color: #000000; background: #FFFFFF; display: block;">»»»»»»»»»»»» '.$title.' ««««««««««««</h3>'; # Imprime o início do pre, de forma visível, ou seja, forçando fundo branco e texto preto. echo '<pre style="font-family: Arial; font-size: 11px; text-align: left; color: #000000; background: #FFFFFF; display: block;">'; # Imprime o array ou objecto print_r($var); # Fecha a tag echo '</pre>'; } # É um texto, inteiro, etc, como tal, mostramos só numa linha else { # Mostramos de forma visível a variável, precedida pelo título caso este tenha sido definido. echo '<h3 style="font-family: Arial; font-size: 13px; text-align: center; font-weight: bold; color: #000000; background: #FFFFFF; display: block;">»»»»»»»»»»»» '.(!empty($title)?$title.' --- ':'').$var.' ««««««««««««</h3>'; } } } ?> |
Modo de utilização:
Como sempre, é bastante simples e intuitivo, segue um exemplo de como fazer output de um array com o título "array definido".
<?php define('_DEBUG_',1); $array = array(array(1,2,3),2,3); debug($array,'array definido'); ?> |
Como sempre, é bastante simples e prático, sendo que serve apenas para simplificar o trabalho de quando uma pessoa quer fazer debug tem de fazer um echo, depois tem de adicionar um <br> para ser perceptível, depois um <pre> no caso de um array ou objecto, depois se o fundo for branco não se lê, etc. etc. 🙂
PERGUNTA: Para além da sugestão que dei em cima (antes da função e do exemplo), sabem-me dizer qual o output deste código que coloquei como exemplo de utilização?
Qualquer dúvida ou sugestão, estão completamente à vontade.
Este artigo tem mais de um ano
Bom artigo 🙂
Eu que ando a migrar para php… 😀
Já agora alguém pode dar uns links de uns exemplos de um formulário com insert ou update a partir de uma bd (mysql) onde depois de alterar o conteúdo receba seja exibida uma mensagem de aviso “concluído / ocorreu um erro”
…
Esplora aqui:
http://www.w3schools.com/PHP/php_mysql_intro.asp
Obrigado 😀
Mas por exemplo se pretender fazer na mesma página o insert e mostrar numa determinada área?
Pá, isso podes fazer de várias maneiras, podes fazer, depois de ele fazer a query do insert, colocares um if, para verificar se foi inserido ou não e fazer um echo do resultado.
$query = “INSERT bla bla bla”;
$resultado = mysql_query($query);
if (mysql_num_rows($resultado)) {
echo “Boa, o gajo mexeu na base de dados”;
} else {
echo “Nada disso…”;
}
E existem outras maneiras de fazer.. esta é simples!
nao faças isso pá! PHP sucks.. Java é que é! 3 milhões de vezes melhor em todos os aspectos possíveis e imaginários (à excepção talvez de ser um pouco mais pesado a meu ver).
E olha que eu trabalho intensivamente com as duas linguagens no meu dia-a-dia a nivel profissional, por isso, penso que a minha opinião é minimamente fundamentada.
Com todo o respeito, cada linguagem tem o seu propósito (nenhuma linguagem “sucks”), e essa comparação com Java faz-me pensar que ou estás a mentir ou não sabes como usar as linguagens, pois têm propósitos totalmente diferentes.
Relativamente ao PHP faço manutenção e desenvolvo plugins para uma instalação da Knowledge Tree Comunity Edition que temos na nossa empresa. Quanto a Java, neste momento estou a utilizar para desenvolver uma plataforma para ser usada para fins governamentais. A questão aqui é, com tudo o que eu já fiz, nunca vi nada que o PHP fizesse que o Java não fizesse de uma forma mais fácil, intuitiva e rápida. Já para não falar que os IDE’s (free) de desenvolvimento para Java são, quanto a mim, muito superiores aos existentes para PHP.
Confesso que também embirrei um pouco com o PHP porque sempre gostei de Java (tanto que já programei um pouco em C# e por ser semelhante ao Java acabei por gostar) mas, ainda assim, mantenho a minha opinião 🙂
abraço
Mesmo?
Então e um Hello World? Como é que é em java? em php é só isto:
<?php echo “Hello World”; >
Não digo que é mais ou menos poderosa do que Java, apenas têm objectivos diferentes.
Java não é para desenvolver sites dinâmicos… mesmo!
Se não gostas de PHP, estás no teu direito, também não gosto de ASP.Net, não é por isso que vou dizer que é pior só porque não gosto.
Bom artigo.
Eu não deixei de fazer a rubrica, apenas estou sem tempo agora mas irei voltar a faze-la em conjunto com o BB.
Bom Artigo.. 😉
OFFtopic
——————–
o Tvtuga.com faz 3 anos!
Já na semana passada fizeste uma “PERGUNTA”, e eu pensei que estavas mesmo com dúvidas. A pergunta desta semana já não parece ser uma dúvida, ou eu não entendi.
Se for uma dúvida tua, podes explicar melhor? Talvez eu saiba responder…
Olá Nuno,
Obrigado pela atenção, mas a Pergunta é simplesmente para vocês praticarem e procurarem a solução, para incentivar e motivar alguma interacção, nada mais 🙂
Ah ok, mas a da semana passada já era mesmo dúvida tua, certo? (cookies)
Não 🙂 Foi mesmo só para o pessoal aprender, tal como referi 🙂
Ah ok! lol… e eu a pensar que te tinha sido útil xD
@ Nuno Peralta
não foste útil ao Bruno, mas foste útil aos outros leitores! 🙂
Sem problema 🙂
Exactamente como a Ana disse 😉
E foste útil para mim também, na medida em que me poupaste o trabalho de responder 😀
Epah esse teu debug é um pouco superficial não?
Que tal assim:
debug_max_Level; $i++)
{
array_push($this->_debug[$i], “Initializing debug level -> $i”);
}
}
}
function readDebug ($level,$limit)
{
$GandaDebugMen = “”;
if(!$level)
{
$level = $this->debug_Level;
}
if(!$limit)
{
foreach($this->_debug[$level] as $debug => $value)
{
$GandaDebugMen .= $value;
}
}
else
{
$GandaDebugMen .= $this->_debug[$level][$limit];
}
return $GandaDebugMen;
}
function setDebug ($level,$debug)
{
array_push($this->_debug[$level], $debug);
}
}
$h = new $heaven;
$h->debug = true;
$h->debug_Level = 2;
$h->setDebug(1,”something bag occured”); //Set’s a debug on LEVEL#1
$h->setDebug(2,”something awful occured”); //Set’s a debug on LEVEL#2
$h->setDebug(3,”something critical occured”); //Set’s a debug on LEVEL#3
$h->setDebug(4,”something has just blown up….”); //Set’s a debug on LEVEL#4
$h->readDebug(2,2); //Outputs 2 lines of debug from LEVEL#2
//If we print_r the _debug var we can see a hole tree of debug things.. Sorry about this “raw” script mas não tenho mxm mais paciencia para escrever mais codigo PHP neste editor que nem WYSIWYG é…. xD lol
Pá mas já sabem se precisarem de ajuda deem um toke xD
E depois custumizem isto á vossa maneira vá…. dou este mas nao dou mais nenhum… só para isto estive aqui uns 10min….. lol
?>
HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA metade do meu codigo nao foi submetido…. era uma classe com construct etc… olha agora também nao vou fazer mais nada F******* ve la se metes um editor aqui como deve de ser.. senão vou optar mesmo por não comentar… =(
Mais uma coisa… podias por aqui o sistema “captcha” que era bom… nunca se sabe quando um engraçadinho vai andar aqui a espalhar comentarios xD
@Ricardo Goulart
O objectivo deste debug é ser fácil de implementar em qualquer projecto, não obrigando a demasiadas linhas de código nem inclusões de outros ficheiros. E fácil de utilizar também.
É superficial? É discutível, mas nunca me deixou ficar mal.
De qualquer das formas, agradeço a tua participação.