à quoi sert "->" entre une variable et une fonc

Invité
Invité n'ayant pas de compte PHPfrance

04 avr. 2007, 13:27

Bonjour à tous,

Je pose peut-être une question stupide... mais bon, j'ai remarqué que dans pas mal de script PHP, on retrouve ce type de routine, exemple :

Code : Tout sélectionner

$mavariable->unefonction();
mais à quoi sert entre la variable et la fonction ce fameux ?? car j'ai toujours lu que l'affectation d'une variable se faisait à l'aide du signe Merci à tous pour vos éclaircissements.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 avr. 2007, 14:10

Hello,

La flèche est utilisée en php pour de la programmation orienté objet (poo). Lorsque tu travail en "objet" tu va créer des classes php qui auront des attributs et des méthodes qui leurs sont propres.
Ex : l'objet voiture aura des attributs du style "marque", "couleur".. et des méthodes du genre "demarrerMoteur()", "passerVitesseSuperieure()", ...

Pour utiliser cet objet, on "l'instancie", c'est à dire que l'on va créer une variable à partir de cette classe :
$maVoiture = new Voiture();
"$maVoiture" est donc une voiture spécifique, construite sur le même modèle que toutes les autres "Voiture" (avec un volant, 4 roues, des sièges, ..). Pour connaitre (ou définir) sa marque, je vais faire appel à l'attribut "marque" de mon instance, et pour cela j'utilise la flèche :
$maVoiture->marque = 'Ferrari'; // tant qu'à faire ;)
if ($maVoiture->demarrerMoteur()) // j'appel la méthode de démarrage de maVoiture, pour ne démarrer qu'elle
  $maVoiture->passerVitesseSuperieure();
La flèche permet donc d'accéder aux propriétés de ton instance (attributs et méthodes). Dans le même genre tu peux utiliser aussi l'opérateur ::
Ce dernier fonctionne de la même manière à ceci près qu'il ne nécessite pas d'avoir une instance spécifique de ta classe.
// autant j'ai besoin d'une voiture particulière pour la démarrer, 
// autant je n'en ai pas besoin pour savoir qu'une voiture n'a qu'un seul volant :)
echo Voiture::nombreDeVolant; 
$maTwingo = new Voiture(); // ma twingo est une instance de Voiture
$maPorshe = new Voiture(); // ma porshe est une autre instance de Voiture

// elles disposent des mêmes attributs et méthodes, mais sont totalement indépendantes l'une de l'autre 
$maPorshe->couleur = 'noir'; 
$maTwingo->couleur 'bleu et verte avec des rayures violettes et des poids jaunes'; // de toute façon j'utilise que la ferrari ;)

$maPorshe->demarrerMoteur(); // seule la porshe va démarrer
En espérant avoir été assez clair :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 1 Messages

04 avr. 2007, 15:08

Si ça c'est pas de la réponse clair, net et précise, qu'on me lance des cailloux !!

Ton explication a été extrêmement clair, je ne pensais pas que PHP permettait ce type de programmation, bref tous les jours PHP me surprend, et je pense que ça ne fait que commencer !

Merci bcp !!!