Page 1 sur 1

Utiliser et modifier une variable dans plusieurs fonctions

Posté : 30 août 2010, 09:21
par jkonrad
Bonjour à tout le monde.
Je travail sur mon premier site en PHP . J'ai reçu de l'aide d'un ami qui m'a aidé à faire une page "produit.class.php" ce fichier contient toutes les fonctions que je peux insérer dans les autres pages.

Mon problème est le suivant: je n'arrive pas à utiliser une variable dans plusieurs fonctions. En faisant quelques recherches j'ai trouvé que l'attribut "Global" était une solution, mais dans mon cas ça ne fonctionne pas car on est en php orienté objet. J'ai finalement trouvé qu'il fallait déclarer la variable au début du fichier pour ensuite la récupérer de la manière suivante $this->variable. Cependant lorsque je modifie la valeur de la variable dans une fonction, je n'arrive pas à la "sauvegarder" pour ensuite la récupérer dans une autre fonction. Je ne sais pas si je suis très claire. Ce bout de code sera peut être plus explicite.

Code : Tout sélectionner

class X <? { var $variable = 0; function Y { $this->variable ; $variable = 4 ; Echo $this->variable ; // affiche4 } function Z { $this->variable ; Echo $this->variable ; //affiche0, j’aimerais qu’il affiche 4 } } ?>
étant super novice j'espère avoir rédigé ce premier poste comme il le fallait et je m'excuse d'avance si j'ai fait une erreur.
merci d'avance

Re: Utiliser et modifier une variable dans plusieurs fonctions

Posté : 30 août 2010, 09:55
par FlyPhp
Bonjour,

Personnellement, si c'est ton premier site en Php, je te conseillerai de ne pas commencer par la programmation objet (enfin c'est mon avis ^^)

J'avoue ne pas très bien comprendre ton code, si tu souhaites utiliser une classe, tu dois la déclarer comme suit :

Code : Tout sélectionner

<?php class X { public $myvar; public function Y() { $this->myvar = 3; } public function Z() { $this->myvar = 4; } } $myobject = new class X(); $X->Y(); echo $X->myvar; // La ta variable sera égal à 3 $X->Z(); echo $X->myvar; // La ta variable sera égal à 4 // Je ne garantie pas le fonctionnement du code (il y a peut être la gestion des variables publics ou privés à revoir mais c'est juste pour te montrer à quoi devrait resembler ton code) ?>
Si tu passes par du non objet au début (ce que je te recommande), tu peux utiliser les variables globals, mais c'est pas très propre (pour cela tu as juste à déclarer global $myvar dans chaque fonction que tu utilises). Le mieux reste de faire des fonctions qui renvoie des valeurs.

Code : Tout sélectionner

<?php var $myvar = 0; function X($myvar) { $myvar = 3; } function Y($myvar) { $myvar = 4; } $myvar = X($myvar); echo $myvar; // La ta variable sera égal à 3 $myvar = Y($myvar); echo $myvar; // La ta variable sera égal à 4 ?>

D'une manière général, avant de commencer à coder, je te conseille de suivre les tutos de ces sites là :
http://www.phpdebutant.org
http://www.siteduzero.com/tutoriel-3-14 ... mysql.html

Re: Utiliser et modifier une variable dans plusieurs fonctions

Posté : 30 août 2010, 10:07
par AoSiX
Salut,

Ton code est un massacre... XD

Laisse moi réarranger un peu tout ça avec des commentaires
<?php  // on utilise <?php et on le place AVANT tout code php
class X 
{
     var $variable = 0;

     function  Y() // on met des parenthèses après le nom d'une fonction
     { 
          $this->variable ; //  |                    <--- ce code ne fait rien...
          $variable = 4 ;   //   +--> Attention ! $variable est différent de $this->variable !! $variable est une fonction qui appartient a la fonction Y, $this->variable appartient lui à la classe
          echo $this->variable ;  //  echo 0 donc
     }
     function  Z
     {
          $this->variable ;//  <--- ce code ne fait rien...
          echo $this->variable ;  // voir l'explication plus haut.
     }
}
?>

Maintenant je te présente une méthode qui fonctionnera ( en PHP4 )
<?php 
class X 
{
     var $variable = 0;

     function  Y()
     { 
          $this->variable  = 4 ;  
          echo $this->variable ; 
     }
     function  Z
     {
          echo $this->variable ; 
     }
}
?>

Re: Utiliser et modifier une variable dans plusieurs fonctions

Posté : 30 août 2010, 11:25
par jkonrad
Tout d'abord merci pour vos réponses, cependant je n'ai pas encore résolu mon problème.

@AoSIX
j'importe les classes de la manière suivante dans ma page:

Code : Tout sélectionner

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>4</title> </head> <?php include('classes/produit.class.php'); $X->Y(); $X->Z(); ?> <body> </body> </html>
et on me retourne l'erreur suivante:

Code : Tout sélectionner

Fatal error: Call to a member function Y() on a non-object in /home/www/dfce9489cc872d0356e69cd786fc1d4b/web/new/affiche.php on line 9
@flyPHP
J'avoue ne pas avoir mis tout le code que j'utilise réellement, je l'ai simplifié au maximum car il fait normalement plus de 500 lignes (et au passage j'ai fais d'énormes erreurs de syntaxe :oops: ) c'est la raison pour laquelle je vais pas tout reprogrammer en non objet.

Le code que tu m'as donné me retourne l'erreur suivante

Code : Tout sélectionner

Parse error: syntax error, unexpected T_CLASS, expecting T_STRING or T_VARIABLE or '$' in /home/www/dfce9489cc872d0356e69cd786fc1d4b/web/new/classes/produit.class.php on line 523// ce qui corresponds ici à la ligne suivante: $myobject = new class X();

Re: Utiliser et modifier une variable dans plusieurs fonctions

Posté : 30 août 2010, 11:46
par AoSiX
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>4</title>
</head>
<?php
	include('classes/produit.class.php');
	$X->Y();
	$X->Z();
	?>
<body>
</body>
</html>
Salut,
rien à voir mais penses à utiliser les balises [ php] sur ce forum !

Ensuite, tu dois, avant d'utiliser ta classe, l'instancier, de la manière suivante :
$X = new X;
tu mets ça juste avant
	$X->Y();
	$X->Z();
et ça devrait marcher, si ta classe X se trouve dans classes/produit.class.php ;)

Re: Utiliser et modifier une variable dans plusieurs fonctions

Posté : 30 août 2010, 14:11
par jkonrad
C'est tout bon merci infiniment!