Archives par mot-clé : cons

Utiliser les méthodes et les attributs d’une autre class

Publié dans PHP objet | Laisser un commentaire

Ah, je viens enfin de mieux comprendre à quoi servait l’opérateur cons ::. Dans le précédent billet où j’en parlais je disais qu’il permet de résoudre un attribut ou une méthode, éh bien c’est tout à fait vrai !

  • Pour appeler un attribut ou une méthode d’une class dans cette même class, on utilise $this->methodeOuAttribut.
  • Pour appeler un attribut ou une méthode d’une class lorsqu’on a instancié cette class, on utilise $nomInstance->methodeOuAttribut.
  • Pour appeler un attribut ou une méthode d’une class dans une autre class, on utilise NomDeLaClass::methodeOuAttribut. Les deux class doivent bien sûr se trouver dans le même fichier, ou on peut inclure l’une dans le fichier de l’autre avec include() ou require().

Dans le cas d’un attribut, si l’on tente d’y accéder avec le nom d’une class, cela signifie que notre attribut doit être static, il reste identique pour toutes les instances de cette class.
Prêt pour un petit exemple (débile) ?

<?php
class DitBonjour {
	protected static $fr = 'Coucou le monde !';
	public static $en = 'Hello world!';
	public static $de = 'Guten tag!';
	function saluer()
	{
		return 'Guten tag!'.'<br />';
	}
	function saluer_en_langue($langue)
	{
		return $langue;
	}
	function fr()
	{
		return self::$fr;
	}
	function de()
	{
		return $this->de;
	}
}

class Appeler {
	function dire_bonjour()
	{
		echo DitBonjour::saluer();
	}
	function dire_bonjour_en_langue()
	{
		echo DitBonjour::saluer_en_langue(DitBonjour::fr()).'<br />';
		echo DitBonjour::saluer_en_langue(DitBonjour::$en).'<br />';
		echo DitBonjour::saluer_en_langue(DitBonjour::de()).'<br />';
	}
}

$appel = new Appeler();
$appel->dire_bonjour();
$appel->dire_bonjour_en_langue();

Ceci renverra :

Guten tag!
Coucou le monde !
Hello world!
Notice: Undefined property: Appeler::$de in F:\bn\Web\Test\PHPObjet\test2.php on line 26

Continuer la lecture

L’opérateur cons et les mots-clés self et parent

Publié dans PHP objet | Laisser un commentaire

Hé, je n’écris pas trop en ce moment. La fin d’année scolaire passe par là : les rendus de projets et les examens fusent de partout. Mais j’arrive quand même à passer un petit peu de temps à découvrir le PHP objet.

L’opérateur cons

L’opérateur cons ou double points (on l’appelle cons en CamL, alors pourquoi pas en PHP ?) permet de résoudre un attribut ou une méthode. On le précède d’un mot clé et on le fait suivre d’un nom d’attribut ou de méthode. On va le voir tout de suite en application…

Les mots-clés self et parent

Self permet de résoudre un attribut ou une méthode de sa propre classe, et parent ceux de sa classe parente, une dont on hérite.

Place aux exemples

<?php
class Blog
{
  var $nom;
  var $description;
  var $categorie = 'Billet';

  function __construct($nom, $description)
  {
    $this->nom = $nom;
    $this->description = $description;
  }

  function ecrire_un_billet()
  {
    echo 'Ceci est un billet de blog<br />';
  }

  function modifier_un_billet()
  {
    echo 'Je modifie un billet de blog<br />';
  }
}

class BlogPhoto extends Blog
{
  var $categorie = 'Photo';

  function ecrire_un_billet()
  {
    echo 'Ceci est un billet de blog photo<br />';
  }

  function test_self()
  {
    self::ecrire_un_billet();
    self::modifier_un_billet();
    echo self::$this->nom.'<br />';
    echo self::$this->categorie.'<br />';
  }

  function test_parent()
  {
    parent::ecrire_un_billet();
    parent::modifier_un_billet();
    echo parent::$this->nom.'<br />';
    echo parent::$this->categorie.'<br />';
  }
}
$blogDeBN = new Blog('30 minutes par jour', '30 minutes par jour au coeur de l\'informatique.');
$blogPhoto = new BlogPhoto('Mon blog photo', 'Des tas de photos partout !');
// Testons les mots-clés :
echo 'Self :<br />';
$blogPhoto->test_self();
echo '<br />Parent :<br />';
$blogPhoto->test_parent();

Comme vous pouvez le voir, le mot-clé parent ne semble pas fonctionner sur un attribut. Je pense que je saisi mal quelque chose. J’ai testé self::nom, ou self::$nom, en mettant mes variables en public ou en static. Bref. Cette histoire de self et de parent semble très simple à première vue mais ça à l’air un tout petit peu plus complexe dans la réalité. Mais la suite de mes lectures me dit que je vais finir par comprendre.