[RESOLU] Que représente $this ici ?

Eléphant du PHP | 65 Messages

20 juin 2014, 23:25

Bonjour,

Dans ce morceau de code, que représente $this ?
<?php
class Voiture { 
 function cetteVoiture() {
  return $this;
 }
 function avance($distance) {
  echo "On avance de $distance mètres";
 }
}
$ma_voiture = new Voiture();
$ma_voiture->cetteVoiture()->avance(100);
?>

ViPHP
xTG
ViPHP | 7331 Messages

21 juin 2014, 08:11

$this représente ton instance d'objet Voiture.
class A
{
  private $chiffre = 0;
  public __construct($param)
  {
    $this->chiffre = $param;
  }
  public function valeur()
  {
    return $this->chiffre;
  }
}
$un = new A(1);
$deux = new A(2);
echo $un->valeur(); // 1
echo $deux->valeur();; // 2

Eléphant du PHP | 65 Messages

21 juin 2014, 10:38

merci xTG de t'intéresser à mon sujet.

OK pour l'instance de l'objet Voiture

Et pourquoi quand le fais ceci :
echo $ma_voiture->cetteVoiture();
cela n'affiche rien ?

Mammouth du PHP | 571 Messages

21 juin 2014, 13:26

Et pourquoi quand le fais ceci :
echo $ma_voiture->cetteVoiture();
cela n'affiche rien ?
pour les mêmes raisons qu'on affichera pas un tableau
$tab = array('orange','apple');
echo $tab; //pas ok
Car un tableau est constitué de plusieurs éléments. Un tableau tout comme une instance est un type composite, par opposition aux types simples(entiers, chaînes...).
Une instance référence l'objet Voiture qui elle même dispose de données membres(attributs et méthodes). C'est grâce aux instances (exception pour les méthodes et attributs static) qu'on peut accéder aux méthodes cetteVoiture(), avance($distance).

Cependant on peut afficher un objet à condition de redéfinir la méthode __toString() :
class A
{
  private $chiffre = 0;
  public __construct($param)
  {
    $this->chiffre = $param;
  }
  public function valeur()
  {
    return $this->chiffre;
  }

     public function __toString()
    {
        return $this->chiffre;
    }

}
$un = new A(1);
$deux = new A(2);
echo $un; // 1
echo $deux; // 2