POO, appeler une class

Eléphant du PHP | 50 Messages

12 oct. 2009, 17:40

Bonjour à tous,

Voilà une question un peu bete mais comment appeler une class dans une autre. Par exemple j'ai dans mon script l'objet $visiteur. Et $visiteur->pseudo est égal à jeremieca par exemple.
Je crée une autre class dans laquelle j'aimerai avoir accès à cet objet $visiteur.
Comment faire s'il vous plait ?

Merci d'avance,
JC.
Devoir de mémoire : http://voyage-etude-auschwitz.net
Projet de classe réalisé suite à un voyage au camp d'Auschwitz.

Eléphant du PHP | 369 Messages

12 oct. 2009, 17:53

Salut,
Bonjour à tous,
Voilà une question un peu bete mais comment appeler une class dans une autre. Par exemple j'ai dans mon script l'objet $visiteur. Et $visiteur->pseudo est égal à jeremieca par exemple.
Je crée une autre class dans laquelle j'aimerai avoir accès à cet objet $visiteur.
Comment faire s'il vous plait ?
Merci d'avance,
JC.
Je ne sais si j'ai bien compris... mais disons que c'est le cas:

L'accèes aux variables intra-class ca se fait soit par variables déclarée "public" dans la class
concernée, ou par héritage soit, encore, par une fonction renvoyant la valeur de la variable.

// --- Public

class Visiteur
{
   public $pseudo;
}

// --- Heritage

class Visiteur
{
   protected $pseudo;
}

class Identity extends Visiteur
{
   function beta()
   {
      echo $this -> $pseudo;
   }
}

// --- By function

class Visiteur
{
   private $pseudo;

   function getValue()
   {
      return  $this -> $pseudo;
   }
}
Y a d'autres techniques... mais c'est un autre sujet.

@+ bon code en espérant n'être pas à coté ;)

ViPHP
AB
ViPHP | 5818 Messages

12 oct. 2009, 18:09

D'ailleurs si tu mets public ta variable pseudo comme dans le premier exemple de FuZZyLine tu pourras y avoir accès depuis l'ensemble de ton code, y compris donc depuis d'autres classes. C'est le principe des méthodes ou variables public.

Eléphant du PHP | 50 Messages

12 oct. 2009, 18:56

Bonjour et merci.

Cependant, je ne pense pas avoir ma réponse.
class auth{
   private $pseudo;
}

$visiteur = new auth();
$visiteur->pseudo = "jeremieca";

class voiture{
   function avance(){
      echo $visiteur->pseudo.' avance dans la voiture';
   }
}
Mais là, il ne connait pas $visiteur pseudo !!
Devoir de mémoire : http://voyage-etude-auschwitz.net
Projet de classe réalisé suite à un voyage au camp d'Auschwitz.

ViPHP
AB
ViPHP | 5818 Messages

12 oct. 2009, 20:28

Par exemple pour illustrer l'attribut public :
class auth {
   public $pseudo;
   

}

class voiture{

   public function avance($variable)
   {
      echo $variable.' avance dans la voiture';
   }
   
    public function avance2($objet)
   {
      echo $objet->pseudo.' avance dans la voiture';
   }  
   
}

$visiteur = new auth();
$visiteur->pseudo = 'jeremieca';


$Voiture = new voiture();

$Voiture->avance($visiteur->pseudo);
echo '<br />';
$Voiture->avance2($visiteur);

Eléphant du PHP | 369 Messages

12 oct. 2009, 20:32

Re,
Bonjour et merci.
Cependant, je ne pense pas avoir ma réponse.
class auth{
   private $pseudo;
}

$visiteur = new auth();
$visiteur->pseudo = "jeremieca";

class voiture{
   function avance(){
      echo $visiteur->pseudo.' avance dans la voiture';
   }
}
Mais là, il ne connait pas $visiteur pseudo !!
Si, tu as eu la réponse et celle-ci correspond tout à fait à ton désir.... 3ieme exemple: By function

Ta variable est privée il te faut, donc, une méthode de lecture (indiquée dans l'exemple) et une
méthode d'assignation.

'tit exemple ?...
final class TaClass
{
 /**
   * Seule et unique variable de class
   *
   * @var private string 
   */
   private $_pseudo = NULL;

 /**
   * Récupération d'une variable par son nom 
   *
   * @value string
   * @return string ou false si échec
   */
   public getValue($keyName)
   {
    /**
      * Variable temporaire contenant variable à retourner si celle-ci est présente
      *
      * @var mixed
      */
      $var = "";

    /**
      * Si la variable n'est pas présente alors on renvoie faux
      */
      switch($keyName)
      {
         case "pseudo":
         {
           /**
            * Variable recherchée... N'est pas traité le cas ou la variable serait nulle
            * ...mais la n'est pas l'objet de ta demande
            */
            $var =  $this -> _pseudo;
         }
         break;

         // ...

       /**
         * Variable introuvable, on sort en renvoyant faux
         */
         default: return false;
      }

     /**
      * Retourne la valeur
      */
      return $var;
   }

 /**
   * Assignation d'une valeur, même technique
   *
   * @value string la clef à recherche
   * @value string la valeur à enregistrer
   *
   * @return bool suivant réussite ou échec de la fonction
   */
   public setValue($keyName, $value)
   {
      switch($keyName)
      {
         case "pseudo":
         {
           /**
            * Variable recherchée...
            */
            $this -> _pseudo = $value;
         }
         break;

         // ...

       /**
         * Retourne la valeur
         */
         default: return false;
      }
      return true;
   }
}
Usage:

$class = new TaClass()
if (!$class -> setValue("pseudo", "toto")) die("Echec !!!");
else echo "La variable pseudo vaut : ".$class -> getValue("pseudo");

Comme tu le vois: Exemple trois donné en post 2.

J'ai mis la class final du fait que ta variable est private, l'intérêt de faire hériter
cette class serait pour le moins inutile. (A part pour les fonctions)

J'ai collé un underscore à ta variable (+ ou - une question de norme) mais le choix
ne le prend pas en compte, attention.

Perso (pour mes scripts) je renvoie la référence et non la valeur voulue mais c'est
un choix perso, à toi de voir.

Voili, voilou... @+ bon code ;)

EDIT: Méchant AB, tu m'as grillé ;( (joke)

Eléphant du PHP | 50 Messages

12 oct. 2009, 21:11

Bon en gros je dois passer l'objet en argument, c'est bien ce qu'il me semblait. J'ai tout de même du mal avec vos explications... Enfin bref. Et sinon vous me dites que je suis dans le cas Private.... Comment faire public ?

O.o je crois que je suis largué !

Merci beaucoup à tous, j'ai une bonne partie de ma réponse déjà !!
Devoir de mémoire : http://voyage-etude-auschwitz.net
Projet de classe réalisé suite à un voyage au camp d'Auschwitz.

ViPHP
AB
ViPHP | 5818 Messages

12 oct. 2009, 22:36

Bah c'est normal que tu sois un peu largué. Faut y aller doucement.
Dans mon petit exemple tout était en public, et si tu remplace "public $pseudo;" dans la class auth par "private $pseudo;" tu verras que php va émettre des messages d'erreur parce qu'on ne peut pas avoir accès à un attribut privé en dehors de la classe elle-même.

Donc si on déclare une variable privée, on se sert d'une fonction public pour pouvoir s'en servir en dehors de la classe. C'est ce que montre le code de FuZZyLine .

Pour faire plus simple et en reprenant mon exemple initial (son exemple est beaucoup plus complet mais moins parlant pour un débutant) :
class auth {

   private $pseudo;
   
   
   public function defini_pseudo($nom)
   {
   $this->pseudo = isset($nom)? $nom : null;
   }
   
   public function retourne_pseudo()
   {
   if (isset($this->pseudo))  return $this->pseudo;
   }
   

}


class voiture{

	private $type;

	
   	public function defini_voiture($type)
   	{
   	$this->type = isset($type)? $type : null;
   	}
   
   
   	public function avance($nom)
   	{
	if (isset($this->type))
    echo $nom.' avance dans la voiture '.$this->type;
   	}
   
}

$visiteur = new auth();
$visiteur->defini_pseudo('jeremieca');


$Voiture = new voiture();
$Voiture->defini_voiture('électrique');

$Voiture->avance($visiteur->retourne_pseudo());
Tu trouveras un bon tuto sur la poo ici

Eléphant du PHP | 50 Messages

12 oct. 2009, 23:03

Ok merci beaucoup à tous !!

Tchaoo.
Devoir de mémoire : http://voyage-etude-auschwitz.net
Projet de classe réalisé suite à un voyage au camp d'Auschwitz.