Ceci est une ancienne révision du document !
# #
<?php class MaClasse { //Une classe est contituée //D'attribut contenant des valeurs private attribut1; //Valeur privée non accessible de l'extérieur public attribut2; //Valeur public accessible de l'extérieur (utilisation non recommandée //De methode contenant des instructions imbriquées dans des fonctions public function methode1; { } public function methode2; { } } //Pour créer les objet $truc1 et $truc2 avec la classe MaClasse $truc1 = new MaClasse; $truc2 = new MaClasse; ?>
Création et utilisation d'une classe :
<?php class MaClasse { private $var1; public $var2 = 'publique'; //Attribut avec valeur prédéfinie private $var3 = 'coucou'; //Attribut avec valeur prédéfinie private $var4 = 'hello'; //Attribut avec valeur prédéfinie public function methode1 () { //$this fait référence à : "moi l'objet" je veux ma valeur de $var3 //Cette instruction affichera "coucou". echo $this->var3; } public function methode2 () { //"moi l'objet" retourne moi ma valeur de $var4 //Cette instruction retournera "hello" return $this->var4; } } // Création de l'objet "$truc" $truc = new MaClasse(); // Exemple d'affichage attribut public dans la classe (non recommandé), les attributs privé ne peuvent pas être affichés. // "Moi l'objet $truc" je veux la valeur de mon attribut public $var2: "publique" sera affiché echo $truc->var2; echo "\n"; //Retour chariot en ligne de commande // "Moi l'objet $truc" j'exécute ma méthode "methode1": Cette instruction affiche "coucou". $truc->methode1(); echo "\n"; // "Moi l'objet $truc" j'exécute ma méthode "methode2". Rien ne sera affiché puisque return n'affiche rien (return utilisé au lieu de echo) $truc->methode2(); // "Moi l'objet $truc" je veux qu'on m'affiche le résultat de la "methode2" que j'exécute : Cette instruction affichera "hello". echo $truc->methode2(); echo "\n"; ?>
Résultat attendu :
publique coucou hello
Le contructeur est une fonction qui permet de définir les valeurs des attributs que l'on souhaite donner à l'objet que l'on crée
<?php class MaClasse { private $var1; private $var2; //Constructeur permettant de définir les valeurs des attribut de l'objet que l'on cré public function __construct ($valeur1, $valeur2) { $this->var1 = $valeur1; $this->var2 = $valeur2; } //Cette fonction affichera les valeurs que l'on a défini en créant notre objet public function affiche_valeurs() { echo $this->var1; echo "\n"; echo $this->var2; echo "\n"; } } $truc = new MaClasse('coucou', 33); $truc->affiche_valeurs(); $machin = new MaClasse('hello', 22); $machin->affiche_valeurs(); ?>
Résultat attendu :
coucou 33 hello 22
<?php class MaClasse { private $var1; public function __construct ($valeur1) { $this->var1 = $valeur1; } public function affiche_ma_valeur1 () { echo $this->var1; echo "\n"; } public function affiche_la_valeur1 (MaClasse $objet) { echo $objet->var1; echo "\n"; } } // On crée les 2 objets en leur donner les valeurs pour les contruires $truc1 = new MaClasse (11); $truc2 = new MaClasse (22); // On affiche la valeur1 de chaque objet $truc1->affiche_ma_valeur1(); $truc2->affiche_ma_valeur1(); // On demande à l'objet $truc1 de sortir la valeur1 de l'objet $truc2 $truc1->affiche_la_valeur1($truc2); ?>
Résultat attendu :
11 22 22
Les constantes sont des variables qui appartiennent à la classe et non à l'objet. Ce sont ds variable prédéfinie dans l'objet et qui ne changent pas.
<?php class MaClasse { private $var1; const VAR_PREDEFINIE1 = 11; const VAR_PREDEFINIE2 = 22; public function __construct ($valeur1) { $this->var1 = $valeur1; } public function affiche_ma_valeur1 () { echo $this->var1; echo "\n"; } public function affiche_la_valeur1 (MaClasse $objet) { echo $objet->var1; echo "\n"; } } // On crée les 2 objets en leur donner les valeurs prédéfinies par la classe $truc1 = new MaClasse (MaClasse::VAR_PREDEFINIE1); $truc2 = new MaClasse (MaClasse::VAR_PREDEFINIE2); // On affiche la valeur1 de chaque objet $truc1->affiche_ma_valeur1(); $truc2->affiche_ma_valeur1(); // On demande à l'objet $truc1 de sortir la valeur1 de l'objet $truc2 $truc1->affiche_la_valeur1($truc2); ?>
Résultat attendu :
11 22 22
<?php class MaClasse { private $var = 'toto'; public static function good_static() { echo "Hello\n"; } public static function bad_static() { //Ceci est un mauvais exemple //Dans un context de methode static, $this qui fait référence à un objet qui n'a rien à faire là $this->var; } } // Ci-dessous la methode good_static de la classe est exécutée. Elle ne necessite pas la création d'un objet MaClasse::good_static(); // Ci-dessous on aura une erreur, puisque le $this défini dans la fonction faite référence à un objet qui n'existe pas MaClasse::bad_static(); ?>
Résultat attendu :
Hello PHP Fatal error: Using $this when not in object context in /var/www/test-php/test/static.php on line 15
<?php class MaClasse { // Déclaration de la variable $compteur // Cette variable n'est utilisable par aucun objet private static $compteur = 0; public function __construct() { // On instancie la variable $compteur qui appartient à la classe (donc utilisation du mot-clé self) // Ici le constructeur incrémente $compteur chaque fois qu'il construit un objet self::$compteur++; } public static function getCompteur() // Méthode statique qui renverra la valeur du compteur { //Attention de bien définir le $ devant l'attribut return self::$compteur; } } $test1 = new MaClasse; $test2 = new MaClasse; $test3 = new MaClasse; // Ceci permet de savoir combien d'objets ont été construit avec MaClasse echo MaClasse::getCompteur(); echo "\n"; ?>
Résultat attendu :
3