POO, appeler une class

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : POO, appeler une class

Re: POO, appeler une class

par Jeremieca » 12 oct. 2009, 23:03

Ok merci beaucoup à tous !!

Tchaoo.

Re: POO, appeler une class

par AB » 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

Re: POO, appeler une class

par Jeremieca » 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à !!

Re: POO, appeler une class

par FuZZyLine » 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)

Re: POO, appeler une class

par AB » 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);

Re: POO, appeler une class

par Jeremieca » 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 !!

Re: POO, appeler une class

par AB » 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.

Re: POO, appeler une class

par FuZZyLine » 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é ;)

POO, appeler une class

par Jeremieca » 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.