Cette page est un résumé complet du fonctionnement des variables en PHP. Le texte est rédigé dans un style légèrement technique et peut ne pas être entièrement compris par les débutants. Si vous êtes intéressé par les bases complètes, lisez alors le tutoriel du débutant et principes d'écriture des variables.
Une variable est un emplacement virtuel dans la mémoire opérationnelle, elle est définie par name
et data type
. Dans le type de données, la variable a ensuite un certain "contenu".
En interne, PHP représente les variables comme une table de hachage, c'est à dire que toutes les variables sont stockées dans une table qui est très rapide à rechercher, donc le temps nécessaire pour accéder à chaque variable est presque constant.
Exemples d'écriture :
$a = 10;$b = 'chat';$c = true;
Chaque ligne de l'échantillon correspond à la définition d'une variable. Le nom de chaque variable commence par le signe dollar $
suivi du nom lui-même. Le signe égal peut être utilisé pour attribuer une valeur à la variable.
En interne, les variables seront stockées en mémoire sous forme de table de hachage :
| Nom | Type | Abréviation | Valeur | Nom.
|-------|---------|---------|---------|
| $a
| integer | int | 10
|
| $b
| chaîne de caractères | chaîne de caractères | cats
| chaîne de caractères
| $c
| boolean | bool | true
|
Les variables sont classées en fonction des droits d'accès et de l'utilisation :
Les variables peuvent contenir tout ce que leur type de données actuel autorise. Si le type de données n'est pas spécifié, il sera déterminé automatiquement, sur la base du contenu (ce qui n'est pas recommandé, car cela peut entraîner des erreurs).
Les types de données fonctionnent de manière indépendante, de sorte que nous pouvons utiliser presque tous les types. Cependant, si nous voulons effectuer une opération de fusion, nous devons toujours assurer la conversion vers un seul format.
Un bon exemple est celui de l'addition et de la multiplication des nombres :
$x = 5; // nombre entier$y = 3; // nombre entier$z = $y + $y; // la variable $z sera composée à partir de plusieurs variables
Dans ce cas, PHP est confronté à la question de savoir quel type de données aura la variable $z
nouvellement créée. S'il s'agit du même type de données et que l'opération est possible, le type de données est hérité.
Cependant, il arrive que nous puissions effectuer une opération avec plusieurs types de données :
$x = 1; // nombre entier$y = 3.14159; // flotteur$z = $y + $y; // flotteur
Dans ce cas, nous fusionnons integer et float. La sortie sera un nombre décimal, donc on utilise float. Dans ce cas, PHP va faire quelque chose appelé repartitionnement dynamique.
Cependant, nous ne pouvons pas toujours compter sur ce comportement. Par exemple, comment voulez-vous fusionner un nombre et une chaîne de caractères ?
$x = 256; // nombre entier$y = 'Hé ! Hé !'; // flotteur$z = $y + $y; // ? ??
PHP est un langage interprété, il a donc quelques particularités par rapport aux autres langages de programmation, l'une d'entre elles est que nous n'avons pas à spécifier de types de données pour les variables, c'est-à-dire que chaque variable change dynamiquement de type de données en fonction de son contenu (sauf indication contraire). Néanmoins, il est bon de connaître au moins les types de données de base, ce qui est particulièrement utile pour optimiser les applications ou travailler avec des bases de données.
La notation peut ressembler à ceci :
$x = (int) 25; // crée une variable de type entier
Vue d'ensemble des types de données.
Quel type de données aura la variable $x
si nous ne connaissons que ce morceau de code source ?
$x = $y;
Il dépend du type de données de la variable $y
dont la valeur et son type de données seront hérités. Dans ce cas, nous ne connaissons pas la variable $x
, donc nous ne pouvons pas continuer à évaluer le code et un message d'erreur serait envoyé.
Ayons les 2 variables suivantes :
$x = 10;$y = '10';
Quelle est la différence entre le contenu des variables $x
et $y
?
La variable $x
est un nombre, $y
est une chaîne (contenant un "1" et un "0"), donc si nous stockons simplement la variable en mémoire et n'effectuons aucune opération qui affectera la valeur. Par exemple, les 2 entrées suivantes donneront le même résultat :
echo $x + 5; // imprime 15echo $y + 5; // imprime 15
Dans le second cas, ce qu'on appelle l'écrasement dynamique se produit, c'est-à-dire que la variable convertit son type de données de sorte qu'une opération de calcul puisse être effectuée sur elle. On ne peut pas toujours se fier à ce comportement et il s'agit plutôt d'un comportement correctif destiné à corriger les scripts de débutants mal écrits. Si possible, écrivez toujours les nombres avec un type de données pour les stocker, car cela augmente leur précision et les rend plus faciles à utiliser à l'avenir.
Note: Il est important de noter que nous ne pouvons pas convertir les types de données de manière complètement arbitraire, ce qui n'est donc pas toujours possible. Si vous remplacez un type de données par un autre (incompatible), il se peut que la conversion ne se fasse pas du tout, ou que le contenu original soit corrompu ou complètement détruit et remplacé par un autre. Par exemple, si vous réécrivez une chaîne de caractères en un nombre entier (et qu'un texte qui n'est pas un nombre est stocké dans la variable), la valeur
1
sera stockée dans la variable au lieu de la valeur numérique.
Toutes les chaînes de caractères sont stockées en interne sous la forme d'un tableau de caractères. C'est-à-dire que chaque caractère a son propre index et peut être référencé. Si nous ne spécifions pas d'index, la chaîne entière est traitée.
$x = 'Programmons en PHP !';$n = 3;echo $x; // ceci imprime le contenu entier de la variable $xecho $x[0]; // ceci imprime le caractère nul de la variable $xecho $x[$n]; // ceci imprime le nième caractère de la variable $x
**Note : ** Les nombres PHP à partir de zéro, c'est-à-dire que le caractère zéro est 'P' et le premier caractère est 'r'.
En outre, les caractères sont commutés par octet. Par exemple, le caractère "non" dans l'encodage UTF-8 est long de 2 octets, donc l'index du caractère dans la chaîne ne correspondra pas à la position réelle lors du défilement et 2 index seront utilisés pour stocker le caractère.
L'existence d'un élément de tableau doit toujours être vérifiée avec la fonction isset()
:
if (isset($x[$n])) {echo $x[$n];}
Vous pouvez aussi l'écrire joliment avec un opérateur ternaire :
echo $x[$n] ?? '';
Ayons la variable suivante :
$q = 'Lorem ipsum, ...';
Et ensuite copier sa valeur dans la variable suivante :
$qi = $q;
Heureusement, aucune copie ne sera effectuée et PHP stockera simplement une référence à la valeur dans une table de hachage. La valeur ne sera réellement copiée que lorsque la valeur de l'une des variables doit changer. Ce comportement est géré par un composant généralement appelé collecteur Garbridge.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | fr