Création
d'entreprise

PHP - Les ressemblances à ne pas confondre




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/...
Publié par Ssylvainsab - Dernière mise à jour le 5 novembre 2009 à 12:03 par marlalapocket
Ce document intitulé « PHP - Les ressemblances à ne pas confondre » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Suggestions
  •  PHP - Les ressemblances à ne pas confondre
  •  PHP Problème qui ressemble aux pointeurs (Résolu) » Bonjour ! En PHP, j'ai un problème avec des variables normales et des variables de session. $_SESSION['bonjour'] existe et vaut "ayo" : $bonjour = $_SESSION['bonjour']; $_SESSION['bonjour'] = "autrechose"; J'aimerais que $bonjour vale "ayo", et pas...
  •  [PHP + MySQL] Rechercher des mot ressemblants » Bonjour. Je souhaiterai créer une sorte de moteur de recherche sur mon site, mais qui chercherait le mot entré, et proposerait des mots ressemblants, comme dans Google, lors d'une faute de frappe. Je ne vois pas du tout comment effectuer cela. Merci....
  •  Redirection php » Fiches pratiques : N'importe quel webmaster réalise un jour qu'un de ses fichiers possède un nom qui ne convient pas ou que l'arborescence des fichiers doit être modifiée. Cependant, s'il est relativement facile de changer les liens sur son site, il est beaucoup plus...
  •  Php » Articles : Qu'est-ce que PHP? PHP est un langage interprété (un langage de script) exécuté du côté serveur (comme les scripts CGI, ASP, ...) et non du côté client (un script écrit en Javascript ou une applet Java s'exécute sur votre ordinateur...). La...
  •  Fichier PHP » Meilleure réponse: Un navigateur ne peut pas "traduire" une page php en html. Seul un serveur peut faire ça. Donc oui, soit free, soit tu installes easyphp sur ton ordinateur, c'est un mini serveur local qui te permet de tester les scripts php. Et tu plac
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
Webmaster - Afficher facilement le code php/xhtml de vos pages
Webmaster - Un formulaire de contact pour votre site