Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wallace Maxters

Quais são as gambiarras mais usadas no PHP e como evitá-las?

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sair ocultando erros só porque o bagaça tá funcionando...

 

if( $condicoes_para_logar = true)
{
header('location: url');
}

Isso por exemplo não faz sentido, porque o php sempre vai criar essa variavel ai...

 

Seria mais logico fazer assim

if( $condicoes_para_logar === true)
{
header('location: url');
}

If só vê se é verdadeiro ou falso, ou seja, não precisa ficar comparando

 

if($condicoes_para_logar)
{
header('location: url');
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

  • ESerra falo

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

 

  • Vamos supor que o luiz, foi instruido a fazer um website em PHP todo orientado a objetos, ele entrega o projeto para esse cliente, e logo apos de algumas semanas, este cliente relata alguns problemas no site...

 

  • Luiz que ja estava de saco cheio de fazer o website, algumas funções ele alterou ultilizando o conceito de orientação a objetos, ja outras ele quebrou o protocolo (' instruido a fazer um website em PHP todo orientado a objetos'), e no caso ele conseguiu arrumar ou cobrir o erro sem a ultilização de classes...

 

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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"?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

 

  1. Qual tipo de planejamento nos iremos usar para montar o codigo do inicio ao fim?
  2. Quais são as melhores praticas e tecnicas para a ultilização de um codigo fonte mais limpo?
  3. Como podemos tornar o codigo mais eficiente e mais eficaz?
  4. Quais os comandos que precisamos modificar para deixar o codigo mais rapido eficiente e eficaz?

 

 

Voce pode ultilizar um metodo chamado ciclo PDCA que no caso esta relacionado com as perguntas que eu fiz acima:

 

 

pdca.png

 

 

  • Por que esse codigo é necessário? Isso terá influência no resultado do programa? Ela é realmente necessário?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.