[PHP] Utilisation de $this->

Technus -  
 LeFredd -
Bonjour,

class Panier {
var $items;
function add_item ($artnr, $num) {
$this->items[$artnr] += $num;
}
}

Je programme du php depuis quelques années en amateur, et je ne comprend toujours pas ce à quoi le $this sert !?

- Pourquoi ne pas faire simplement :

$items[$artnr] += $num;

- Et quelle valeur $this prend ?

- Et à quoi sert le "var" ? Est-il obligatoire ?

Merci d'avance :)

(j'aurais peut-être quelques autres questions à vous poser, en ce moment je me lance dans les Classes)
Configuration: Mac OS X
Firefox 2.0.0.12
Macbook 2.16Ghz Core 2 Duo, 2Go RAM, 160Go DD

2 réponses

  1. LeFredd
     
    1- Dans une classe, quand tu as une méthode qui a besoin d'accéder aux propriétés de cette classe pour lui attribuer une valeur par exemple, alors il faut utiliser le mot clé $this. Prend ça comme une convention.
    -> $this permet donc à une méthode (entre autre) d'accéder aux propriétés de ta classe.

    2- Maintenant pour être dans le concret lorsque tu instancies ta classe pour en faire un objet, tu peux remplacer mentalement le mot clé $this par le nom de l'objet que tu viens de créer pour que se soit plus clair pour toi, et parceque réellement $this représente l'objet instancié.
    Je m'explique: imagines une classe :

    class Personnage()
    {
    public $nom;
    public $parler;
    // Je viens de définir 2 propriétés qui définiront mon futur objet Personnage

    public function donnerUnNom($nomPerso)
    {
    $this->nom = $nomPerso;
    }
    // Le contenu de cette méthode veux dire que lorsque tu l'appelles, elle donne une valeur (correspondant à l'argument que tu lui a passé) à la propriété $nom, de l'objet Personnage.
    // Exemple :
    // $toto = new Personnage();

    // je veux donner un nom à toto :
    // $toto->donnerUnNom('Des Blagues');

    // C'est là ou tu peux remplacer mentalement le mot clé $this par $toto. Ce qui donnerai : "Le nom de $toto est égal à l'argument $nomPerso de la méthode donnerUnNom() qui vaut Des Blagues.
    // Ici la propriété $nom vaut donc Des Blagues.
    // Maintenant si tu veux afficher le nom de ton personnage, il faudrait que tu crée une méthode qui te permette d'afficher le nom ex :

    public function afficherNom()
    {
    echo $this->nom;
    // ici tu peux dire mentalement "affiche le nom de l'objet $toto"
    }
    }

    //Ici on est en dehors de la classe. Si je reprend mon exemple plus haut cela donne :

    $toto = new Personnage();
    // on instancie la classe pour en faire un objet $toto.

    $toto->donnerUnNom('Des Blagues');
    // avec l'objet créé, on appelle la méthode qui sert à donner un nom à son personnage.

    $toto->afficherNom();
    // ici on appelle la méthode qui affichera le nom(correspondant à la propriété $nom) de l'objet, donc : Des Blagues

    Voilà j'espère t'avoir éclairé ;)
    13