PHP - Semelhanças a não serem confundidas

Dezembro 2016



Introdução


Esta dica apresenta várias funções ou truques em PHP que são diferentes, enquanto que muitas pessoas pensam que elas agem da mesma maneira.

Concatenação ou parâmetros?


Com a função echo (ou print), é possível exibir diversas variáveis e cadeias de caracteres.
Exemplo:
<?php 
$blabla='do texto'; 
echo 'Isto é',$blabla; 
?>
aqui, utilizamos a vírgula entre a cadeia de caracteres e a variável.
Também podemos utilizar um ponto.

Quando utilizamos pontos, chamamos isso de concatenação.
Com vírgulas, é a passagem de vários parâmetros para a função.

Eu testei dois métodos e a passagem de vários parâmetros é, com certeza, mais rápida.

Aliás, veja a página de teste onde são comparados os dois métodos:

No entanto, as vírgulas só podem ser utilizadas com um echo ou um print, ao contrário da concatenação.
Exemplo:
<?php 
echo $blabla.'blabla';//funciona (concatenação) 
echo $blabla,'blabla';// funciona (passagem de vários parâmetros) 
$variable=$blabla.'blabla'// funciona (concatenação) 
$variable=$blabla,'blabla'//não funciona (passagem de vários parâmetros) 
?>

Aspas/Apóstrofo


Ou também "Aspas duplas/Aspas simples".

Ao usar a função echo, ela pode ser usada com aspas simples ou duplas.

Com aspas duplas, uma variável será exibida.

Com aspas simples, ela será contada como texto.


Exemplo:
<?php 
$variável='Texto'; 
echo "Isto é: $variável"; 
//exibe: "Isto é: Texto" 

$variável ='Texto'; 
echo 'Veja uma $variável; 
//exiobe: "Veja uma $variável " 
?>


Aliás, é por isso que é mais rápido usar uma string com aspas simples, porque o PHP não "busca" variáveis.

Estrutura require/include


Essas duas estruturas, que permitem incluir um arquivo na página, são praticamente idênticos, exceto no que se refere à gestão de erros.

Se o arquivo não existe, "include" gera um erro de nível "Warnig" (alerta), mas "require" gera um erro fatal e interrompe o script.
include
require

Em vez disso, use o include_once e o require_once que assegurarão que o seu arquivo seja incluído apenas uma vez, caso o "include" ou o "require" tentem incluir, acidentalmente, uma página que já foi incluída.

isset vs empty


A função isset verifica a existência de uma variável.
Pronto.

A função empty, ela, verifica:
  • Se a variável existe (como a função isset)
  • Se um número não for igual a zero
  • Se uma string não estiver vazia ou não contiver apenas espaços/ponto parágrafo/ tabulação ou um zero.

Então, é mais tarde de fazer:
<?php 
if (empty($variável)) 
    echo 'A variável está vazia'; 
else 
    echo 'A variável não está vazia'; 
?>

Que :
if (isset($variable)) 
  { 
    if (empty($variável)) 
        echo 'A variável está vazia''; 
    else 
        echo 'A variável não está vazia'; 
  } 
else 
   echo 'A variável não existe'; 
?>

htmlentities ou htmlspecialchars ?


Esses recursos ajudam a tornar "inofensivas" as variáveis, ou seja, substituir certos caracteres (especialmente os chevrons ">" e "<") por suas entidades html.

No entanto, há uma leve diferença entre os dois:
htmlentities substitui todos os caracteres que podem ser escritos com
entidades por suas respectivas entidades html.

Exemplos:
é se torna é 
"se torna" 
«se torna« 
< se torna & lt; (sem espaço depois &) 
& se torna &



htmlspecialchars, ela, substitui apenas os caracteres especiais que servem a codificar:
< se torna & lt; (sem espaço após &) 
> se torna & gt; (sem espaço após &) 
" se torna &quot, 
& se torna &


A única entidade html que eu conheço e que não é substituida por padrão é a "'", a entidade do apóstrofo: '

Você pode usar as opções para substituir,ou não, determinados caracteres (veja a documentação).

O apóstrofo é substituído por ''' com a opção ENT_QUOTES.


Que função utilizar?
Eu recomendaria a htmlentities por que os acentos e outros caracteres especiais são substituídos, assegurando que você haverá erro de codificação.

No entanto, os arquivos ficam mais pesados com esta função, pois uma entidade ocupa 8 bytes (eu acho) a mais que o caractere que lhe corresponde, escrito tal qual.

htmlentities
htmlspecialchars

Número de sinais igual


Veja um exemplo de condição:
if($InfosSurLimage=@getimagesize($imagem)) 
   echo'é bom, temos as informações da imagem'; 
else 
   echo'há um problema (endereço errado, imagem no formato ico/bmp...)';

Aqui, tem um sinal igual («$InformaçõesSobreAImagem=@getimagesize($imagem)»), o que signifie que atribuímos o resultado do getimagesize à variável "$InformaçõesSobreAImagem", depois verificamos se ela vale true (a função teve êxito) ou false (um erro) com a condição.

Outro exemplo, com dois sinais desta vez:
//definir uma variável falasa (por exemplo):
$VariávelQueNãoServeParaNada=0; 
if($VariávelQueNãoServeParaNada ==false) 
  echo '$VariávelQueNãoServeParaNada vale "false" é uma condição verificada com dois sinais =='; 
else 
  echo '$VariávelQueNãoServeParaNada vale "false" é uma condição NÃO verificada com dois sinais =='; 
  
Aqui, a condição é verificada, pois só utilizamos dois sinais de igual.
false e 0 não são do mesmo tipo, mas equivalem à uma variável vazia.
Com dois sinais, verificamos então a equivalência.

No entanto, se usarmos três sinais de igual, a condição não será verificada por que três sinais de igual significam mesmo valor e mesmo tipo .

Exemplos:
Com dois sinais de igual, esta condição é verificada:
'0'==0==false

Com três sinais de igual, esta mesma condição não será verificada por que:
'0':Cadeia de caracteres
0:valor numérico
false:booleano


Resumindo:
= : Atribui-se um valor à uma variável
== : Verifica-se se os valores são equivalentes
=== : Verifica-se se os valores são equivalentes e do mesmo tipo.

Alguns exemplos estão disponíveis aqui:
(em francês)


Tradução feita por Lucia Maurity y Nouira

Veja também :
Este documento, intitulado « PHP - Semelhanças a não serem confundidas  »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.