[PHP] Les ressemblances à ne pas confondre

Dernière mise à jour le 5 novembre 2009 à 12:03 par marlalapocket
Publié par Ssylvainsab



Introduction


Cette astuce présente plusieurs fonction ou astuces en php qui sont différentes alors que beaucoup de monde croit qu'elles agissent de la même façon.

Concaténation ou paramètres ?


Avec la fonction echo (ou print), on peut afficher plusieurs variables et chaines de caractères à la suite.
Exemple :
<?php
$blabla='du texte';
echo 'Ceci est ',$blabla;
?>
Ici, on utilise la virgule entre la chaine de caractères et la variable.
On peut également utiliser un point.

Lorsque l'on utilise des points, on apelle ça la concatenation.
Avec des virgules, c'est le passage de plusieurs paramètres à la fonction.

J'ai testé les deux méthodes, et le passage de plusieurs paramètres est assurément plus rapide.

Voici d'ailleurs une page de test ou sont comparés les deux méthodes :

Cependant, les virgules ne peuvent être utilisés qu'avec un echo ou un print, contrairement à la concaténation.
Exemple :
<?php
echo $blabla.'blabla';//fonctionne (concaténation)
echo $blabla,'blabla';//fonctionne (passage de plusieurs paramètres)
$variable=$blabla.'blabla'//fonctionne (concaténation)
$variable=$blabla,'blabla'//ne fonctionne pas (passage de plusieurs paramètres)
?>

Guillemets/Apostrophe


Ou aussi "Doubles quotes/Simples quotes".
Lorsque l'on utilise la fonction echo, elle peut être utilisée avec des doubles ou simples quotes.
Avec des doubles quotes, une variable sera affichée.
Avec des simples quotes, elle sera comptée comme texte.

Exemple :
<?php
$variable='Texte';
echo "Ceci est : $variable";
//affiche : "Ceci est : Texte"

$variable='Texte';
echo 'Voici un $variable';
//affiche : "Voici un $variable"
?>

C'est d'ailleurs pour ça qu'il est plus rapide d'utiliser une chaine avec des simples quotes, car php ne "cherche" pas de variables.

Structure require/include


Ces deux structures, qui permettent d'inclure un fichier dans la page, sont quasi-identiques, sauf au niveau de la gestion des erreurs.
Si le fichier n'existe pas, include génère une erreur de niveau Warnig (alerte) mais require génère une erreur fatale et l'arrêt du script.
include
require

Utilisez plutôt include_once et require_once qui vous assureront que votre fichier n'est inclu qu'une seule fois, au cas où include ou require tentent d'inclure accidentellement une page qui a déjà été inclue.

isset vs empty


La fonction isset vérifie l'existence d'une variable.
C'est tout.

La fonction empty, elle, vérifie :
  • Si la variable existe (comme la fonction isset)
  • Si un nombre n'est pas égal a zéro
  • Si une chaîne de caractères n'est pas vide ou ne contient pas que des espaces/retours a la ligne/tabulations ou un zéro.


Donc c'est plus rapide de faire :
<?php
if (empty($variable))
    echo 'La variable est vide';
else
    echo 'La variable n'est pas vide';
?>

Que :
if (isset($variable))
  {
    if (empty($variable))
        echo 'La variable est vide';
    else
        echo 'La variable n'est pas vide';
  }
else
   echo 'La variable n'existe pas';
?>

htmlentities ou htmlspecialchars ?


Ces fonction permettent de rendre "inoffensives" des variables, c'est a dire des remplacer certains caractères (notamment les chevrons ">" et "<") par leurs entités html.

cependant, il y a une légère différence entre les deux :
htmlentities remplace tous les caractères qui peuvent s'écrire avec des
entités par leurs entités html correspondantes.
Exemples :
é devient &eacute;
" devient &quot;
« devient &laquo;
< devient & lt; (sans espace après &)
& devient &amp;



htmlspecialchars, elle, remplace seulement les caractères spéciaux qui servent à coder :
< devient & lt; (sans espace après &)
> devient & gt; (sans espace après &)
" devient &quot,
& devient &amp;


La seule entité html que je connais et qui n'est pas remplacée par défaut est "&apos;", l'entité de l'apostrophe : '
On peut utiliser des options pour remplacer ou non certains caractères (se reporter a la documentation).
L'apostrophe est remplacé par '&#039;' avec l'option ENT_QUOTES.

Quelle fonction utiliser ?
Je conseille plutôt htmlentities car les accents et autres caractères spéciaux sont remplacés, ce qui garantit que vous n'aurez pas d'erreur d'encodage.
Cependant, les fichiers sont plus lourds avec cette fonction, car une entité occupe 8 octets (je crois) de plus que le caractère qui lui correspond écrit tel quel.
htmlentities
htmlspecialchars

Nombre de signes égal


Voici un exemple de condition :
if($InfosSurLimage=@getimagesize($image))
   echo'c'est bon, on a les infos de l'image';
else
   echo'il y a un problème (mauvaise adresse, image au format ico/bmp...)';

Ici, il y a un signe égal («$InfosSurLimage=@getimagesize($image)»), ce qui signifie que l'on attribue le résultat de getimagesize à la variable "$InfosSurLimage", puis on vérifie si elle vaut true (la fonction a réussi) ou false (une erreur) avec la condition.


Un autre exemple, avec deux signes cette fois-ci :
//on définit une variable bidon (pour l'exemple) :
$VariableQuiSertARien=0;
if($VariableQuiSertARien==false)
  echo '$VariableQuiSertARien vaut false est une condition vérifiée avec deux signes ==';
else
  echo '$VariableQuiSertARien vaut false est une condition NON vérifiée avec deux signes ==';
  
Ici, la condition est vérifiée, car on n'utilise que deux signes égal.
false et 0 ne sont pas du même type, mais ils équivalent a une variable vide.
Avec deux signes, on vérifie donc l'équivalence.

Cependant, si on utilise trois signes égal, la condition n'est pas vérifiée car trois signes égal signifient même valeur et même type.

Exemples :
Avec deux signes égal,cette condition est vérifiée :
'0'==0==false

Avec trois signes égal, cette même condition n'est pas vérifiée, car :
'0':Chaîne de caractères
0:valeur numérique
false:booléen


Pour résumer :
= : On attribue une valeur a une variable
== : On vérifie si les valeurs sont équivalentes
=== : On vérifie si les valeurs sont équivalentes et de même type.

Certains des exemples sont disponibles ici :
http://ssylvainsab.free.fr/...
Meilleures réponses pour « Les ressemblances à ne pas confondre » dans :
Backweb - backweb.exe Voir backweb - backweb.exe Le processus backweb.exe (backweb) peut indiquer la présence du spyware backWeb. Il ne faut pas le confondre avec backweb-8876480 (backweb-8876480.exe), qui est un utilitaire de Logitech permettant de mettre à jour les pilotes...
Qu'est ce qu'un proxy ? VoirQu'est ce qu'un proxy ? On parle souvent au sein d'un réseau informatique de proxy ... Qu'en est t'il ? A quoi ça sert ? Comment ça marche ? NOTA: Ne pas confondre avec un firewall (pare-feu) bien que le couplage des deux matériels en un...
Télécharger The Cleaner 2010 VoirThe Cleaner, a ne pas confondre avec CCleaner, a été écrit à l'origine pour contrer les trojan Back Orifice. Il est rapidement passé à détecter des milliers de programmes malveillants et continue de le faire aujourd'hui. Cette version n'est plus un...
Télécharger Atomix MP3 VoirAtomixMP3 est un logiciel de Mixage de son MP3, WAV et WMA fort surprenant. Les connaisseurs remarqueront sa ressemblance avec VirtuaDJ. AtomixMP3 dispose de deux Platines, vous fournissant les habituels 2 morceau lecteur MP3, tangage,...