Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bem, quando estamos inciando na jornada rumo ao PHP, nos deparamos com tutoriais pela internet que acabem ensinando as coisas meio que no "estilo gambiarra".
Eu queria saber quais são as gambiarras no PHP mais comuns, ou as que vocês já presenciaram, e também uma maneira mais prática de resolvê-las!
Exemplo:
//Obtem um array com o alfabeto //
$alfabeto = "a,b,c,d,e,f,g,h,i,j,l,k";
$alfabeto = explode(',', $alfabeto);
ao invés de:
// Obtem um array com o alfabeto //
$alfabeto = range('a', 'z');
Ou:
if( $condicoes_para_logar = true)
{
echo "<script>document.location = \"url\";</script>";
}
ao invés de :
if( $condicoes_para_logar = true)
{
header('location: url');
}
Quero aprender um pouco sobre boas práticas! Desde já agradeço.
Acho que o seu conceito de gambiarra já está errado... alguém deixar de usar range é falta de conhecimento, gambiarra é fazer coisas que não fazem sentido, apenas "porque funcionam" ali, exemplo que já vi em script:
if(1 > 2){
}else{
}
Pode isso Arnaldo?
Sair ocultando erros só porque o bagaça tá funcionando...
if( $condicoes_para_logar = true)
{
header('location: url');
}Seria mais logico fazer assim
if( $condicoes_para_logar === true)
{
header('location: url');
}if($condicoes_para_logar)
{
header('location: url');
}Isso que você disse não faz muito sentido cara, criar a função que retorna true ou false não é uma gambiarra, usar os comparadores "==" e "===" também não é usar o php de forma errada.
Gambiarra é contornar um erro ou então fazer algo funcionar forçado, sem que isto faça sentido, apenas funcione.
>
if( $condicoes_para_logar === true)
{
header('location: url');
}
Esqueci desse detalhe ("==="). Escrevi o post com pressa.
>
Bem, quando estamos inciando na jornada rumo ao PHP, nos deparamos com tutoriais pela internet que acabem ensinando as coisas meio que no "estilo gambiarra".
Eu queria saber quais são as gambiarras no PHP mais comuns, ou as que vocês já presenciaram, e também uma maneira mais prática de resolvê-las!
Exemplo:
//Obtem um array com o alfabeto //
$alfabeto = "a,b,c,d,e,f,g,h,i,j,l,k";
$alfabeto = explode(',', $alfabeto);
ao invés de:
// Obtem um array com o alfabeto //
$alfabeto = range('a', 'z');
Ou:
if( $condicoes_para_logar = true)
{
echo "<script>document.location = \"url\";</script>";
}
ao invés de :
if( $condicoes_para_logar = true)
{
header('location: url');
}
Quero aprender um pouco sobre boas práticas! Desde já agradeço.
usar explore ou range são modos diferentes de encontrar uma solução isso não resulta em um "Go horser", go horser na verdade é codigo sujo e monte de logica sem sentido para achar um "resultado" como o
A mais comum que eu costumo ver é usar ob_start para resolver erro de "Headers already sent" e o outro é o ocultamento de erros (arroba, error_reporting desligado, etc.).
Eu recomendo um livro chamado Clean Code, que, apesar de ser em Java, é uma jóia de informações sobre código limpo.
Bem 'gambiarras' no PHP é um codigo na qual o programador nao tinha planejado e que foi inserido com o intuito de cobrir ou executar uma função desordenada do padrão que foi proposto, Exemplo:
Apartir do momento em que ele quebra esse protocolo ele esta realizando uma 'gambiarra', e como dito anteriormente gambiarra é toda uma ação despadronizada aplicado a um(a) determinado(a) 'coisa', com o intuito de fazer funcionar.
Com relação aos codigos que voce postou acima, nao vejo problema algum em ultiliza-los, na verdade estes metodos nao são considerados (pelo menos pra min) como gambiarras
$alfabeto = "a,b,c,d,e,f,g,h,i,j,l,k";
$alfabeto = explode(',', $alfabeto);
$alfabeto = range('a', 'z');
Pois debaixo dos panos do codigo, eles levam a somente um lugar, que no caso é obter o alfabeto, é claro que neste tipo de situação voce pode usar um comando range(), que ja faz isso de automatico, mas se voce é daquelas pessoas que ainda esta aprendendo e gosta de visualizar as coisas tim-tim por tim-tim, voce pode seguir o padrão que desejar...
>
A mais comum que eu costumo ver é usar ob_start para resolver erro de "Headers already sent" e o outro é o ocultamento de erros (arroba, error_reporting desligado, etc.).
Eu recomendo um livro chamado Clean Code, que, apesar de ser em Java, é uma jóia de informações sobre código limpo.
Como eu disse em um post anterior, onde eu ralava, o cara fez assim para evitar o "Headers already sent":
echo "<script>document.location = 'url';</script>";
Basta o usuário desativar o javascript e a lambança tá feita.
>
A mais comum que eu costumo ver é usar ob_start para resolver erro de "Headers already sent" e o outro é o ocultamento de erros (arroba, error_reporting desligado, etc.).
Eu recomendo um livro chamado Clean Code, que, apesar de ser em Java, é uma jóia de informações sobre código limpo.
referente aos error_reporting como você os soluciona ?
referente aos error_reporting como você os soluciona ?
Hum... Sempre que eu uso o notepad++ e seleciono "UTF-8 SEM BOM" resolve.
Há recomendações que não se utilize "?>" para "fechar o PHP" em includes, já que depois desse "?>" sem querer o usuário pode digitar um espaço em branco e isso ser considerado uma saída para o navegador.
>
Hum... Sempre que eu uso o notepad++ e seleciono "UTF-8 SEM BOM" resolve.
Há recomendações que não se utilize "?>" para "fechar o PHP" em includes, já que depois desse "?>" sem querer o usuário pode digitar um espaço em branco e isso ser considerado uma saída para o navegador.
pra mim nem rola eu uso sublime ... eos erros reporting pelo menos localmente rsrs aparece bastante eu desativo no wamp
Basta o usuário desativar o javascript e a lambança tá feita.
Neste caso, isso seria um codigo de um programador iniciante que nao entende muito bem o conceito de 'portabilidade'
a portabilidade de um programa de computador) refere-se à característica das aplicações serem executáveis (ou facilmente recompiladas) em outras plataformas além daquela de origem;
referente aos error_reporting como você os soluciona ?
Existem algumas funções que podem ocultar este tipo de erro, mas é altamente aconselhavel que voce nao oculte-os, e sim tentar resolver os erros no codigo
Com relação aos codigos que voce postou acima, nao vejo problema algum em ultiliza-los, na verdade estes metodos nao são considerados (pelo menos pra min) como gambiarras
Bem, então quer dizer que...
foreach( (array)$array as $key => $val )
{
}
... não seria uma gambiarra, seria uma "solução alternativa"?
>
Bem, então quer dizer que
foreach( (array)$array as $key => $val ){
}
Isso vai depender do planejamento que voce pensou antes de colocar a mão na massa, Vou deixar aqui algumas perguntas de como melhorar seu codigo:
Voce pode ultilizar um metodo chamado ciclo PDCA que no caso esta relacionado com as perguntas que eu fiz acima:
/applications/core/interface/imageproxy/imageproxy.php?img=http://academiaplatonica.com.br/wp-content/uploads/2011/06/pdca.png&key=d9bedcbf2b095d5039dc66b5d3bc8dea7e1c75d85c0032565afc557ece35a12a" alt="pdca.png" />
Gostei
Bem, espero que tenha resolvido a sua duvida, caso nao, volte a postar aqui, ou talvez se quiser mais detalhes dos assuntos aqui comentados. Ajude marcando como resolvido ou dando +1 :yes:
error_reporting se resolve resolvendo os erros...
Concordo com o Enrico, não é utilizando arrobas nem escondendo os erros que se resolve... A comparação pode até ser um pouco "forçada", mas é como fingir que um casamento está indo muito bem quando na verdade não está... O sistema funciona, as telas são exibidas, os dados são inseridos e atualizados, mas se você habilitar a exibição dos erros verá que um monte de warnings são gerados... Oras, por que não resolvê-los então? :closedeyes:
error_reporting se resolve resolvendo os erros...
kkkkkkk.....
Boa!
As vezes um gambiarra resolve problema ainda mais quem trabalha com trasos apertados nao da pra fica as vezes buscando a solução mais eficaz, eu uso a que vai resolve meu problema kkkkkk
O problema é que uma gambiarra dá uma bela dor de cabeça no futuro. Gambiarras são feitas quando não há planejamento e/ou conhecimento do problema/ferramenta. Um bom modo de evitar gambiarras é usando TDD (de modo correto).
Gambiarras que mais vi em PHP e mais me dá medo só de olhar.
1) o simples uso do var_export que na minha opinião devia ser banido e devia chicotear o cara que usa isso.
2) uso de globals (esclarecendo globals não é gambiarra, é chamada para fazer uma ou mais, se gambiarra e globais fossem tabelas o relacionamento seria um para muitos, uma variável global pode ter muitas gambiarras).
3) $$variavel esse é outro item que devia ser punido com chicotada e depois banho de sal grosso.
4) if dentro de if desnecessários, muitas vezes os códigos podem ser simplificados com o uso de return não obrigando o programador que for dar manutenção continuar lendo o código até o final da função para ver se tem mais alguma coisa a ser feita. Geralmente se um código tem três níveis de indentação, provavelmente há como simplificar.
>
no Exemplo:
if( $condicoes_para_logar = true) {
}
A condição será sempre verdadeira, desde que exista memória, pois o programa não testa o valor true, nem a variável $condicoes_para_logar, ele testa se conseguiu atribuir um valor para a variável, alocar a área de memória e atribui o valor.
>
todas essas coisas são diferentes:
( $condicoes_para_logar = true)
( $condicoes_para_logar == true)
( $condicoes_para_logar === true)
As vezes um gambiarra resolve problema ainda mais quem trabalha com trasos apertados nao da pra fica as vezes buscando a solução mais eficaz, eu uso a que vai resolve meu problema kkkkkk
O problema é: sofre quem vem depois pra mexer no seu código.
kkkkkkkkkkkkkkk
... Um bom modo de evitar gambiarras é usando TDD (de modo correto).
Completando: "... E também parar de preguiça e usar mais o Google";
Concordo com o Enrico, não é utilizando arrobas nem escondendo os erros que se resolve... A comparação pode até ser um pouco "forçada", mas é como fingir que um casamento está indo muito bem quando na verdade não está... O sistema funciona, as telas são exibidas, os dados são inseridos e atualizados, mas se você habilitar a exibição dos erros verá que um monte de warnings são gerados... Oras, por que não resolvê-los então? :closedeyes:
Porque tá funcionando... :natalbiggrin:
http://www.phptherightway.com/
Comece por aqui.