8768 sujets

Développement web côté serveur, CMS

Bonjour à vous tous,

On est bien d'accord que lorsqu'on déclare une variable en PHP (ou tout autre langage de programmation), la valeur de cette affectation est rangée dans la RAM de l'ordinateur. Et si on déclare à nouveau cette même variable contenant une autre valeur, cette deuxième déclaration remplace la première.

Voici un cas concret :

Si je déclare une variable $nombre = 5 et qu'à l'instruction suivante je déclare la même variable $nombre = $nombre + 1, en toute logique la variable $nombre = 5 (la première déclaration) sera écrasée et remplacée par elle même avec la valeur 1 en plus. Donc, la deuxième ligne d'instruction ne peut pas être exécutée puisque la variable $nombre = 5 n'existe plus une fois l'instruction suivante exécutée, remplacée par $nombre = $nombre + 1.

Est-ce qu'il n'aurait pas fallu plutôt écrire, pour éviter la confusion :

$number1 = 5;
$number2 = $number1 + 1;*/
echo $number2;

Mais toujours est-il qu'en conservant le même nom de variable, cela fonctionne et le navigateur me renvoie le résultat 6 à l'instruction echo. Ce n'est pas un casse-tête chinois ?
Modifié par ObiJuanKenobi (29 Mar 2022 - 07:19)
Salut,

Une variable c'est effectivement un emplacement mémoire dont le contenu est remplacé à chaque affectation. Techniquement il n'y a aucun problème avec le fait de réaffecter une variable. Donc ton premier exemple tient la route et il n'est pas nécessaire de déclarer une seconde variable.

En revanche, il existe quand même certains cas où ce n'est pas possible. Dans la plupart des langages il est possible de déclarer une constante. Comme son nom l'indique, la valeur est constante et donc elle ne peut être affectée qu'une seule fois.

D'une manière générale, on préfère utiliser les constantes dès que possible car réaffecter une variable dont la portée est large (accessible dans une grande portion de code) peut avoir des effets de bord indésirables. Pour aller plus loin, certains paradigmes comme la programmation fonctionnelle n'utilisent même plus de variables à proprement parler.
Tu peux voir ça comme une manière de structurer ton code. Mais pour un débutant c'est pas là-dessus que tu dois te concentrer. Tu les verras plus tard Smiley smile
J'ai trouvé sur le web une explication. C'est la lecture Yoda, on raisonne à l'envers. C'est-à-dire que l'instruction $nombre = $nombre + 1 doit se lire de la manière suivante : on prend la valeur "+ 1" qu'on ajoute à la variable $nombre, le résultat de ce calcul est à son tour réaffecté à nouveau à la variable $nombre. Ainsi, la valeur initiale de la variable $nombre (5 au début) est belle et bien effacée au profit de la nouvelle valeur ($nombre + 1).

Comment savoir quelle est, ou sont, les variables stockées en RAM à un moment donné ? Le navigateur peut afficher cela ?
Modifié par ObiJuanKenobi (29 Mar 2022 - 12:03)
ObiJuanKenobi a écrit :
Comment savoir quelle est, ou sont, les variables stockées en RAM à un moment donné ? Le navigateur peut afficher cela ?


Il faut lancer ton application en mode debug. Sur certains IDE ça nécessite un peu plus de configuration mais une fois que c'est en place c'est très puissant. Tu peux exécuter ton code ligne après ligne, et consulter l'état des variables en temps réel. Ça te permet de mettre rapidement en évidence les erreurs et c'est bien plus efficace que de faire des "echo" à tout va.
Salut

Comme le dit Anymah, le navigateur ne sait pas ça. C'est ton IDE qui va t'indiquer cela en mode debug => pas à pas.
Merci Anymah et Jencal mais je vous rappelle que je débute dans le développement en PHP et que vous employez des termes que je ne connais pas du tout. Qu'est-ce que c'est qu'un, ou une, IDE ? Et c'est quoi le mode débug ?
Un IDE c'est un environement de développement

c'est un logiciel dans lequel tu vas coder, ici ton php.

Tu en as des gratuit comme Visual Studio Code, ou des payants comme PHPStorm
et dedans, quand tu as ouvert ton projet avec, tu peux utiliser le mode debug qui te permet de debugger ton application. Explication ici : https://www.youtube.com/watch?v=LNIvugvmCyQ