- Classe = Entité regroupant des attributs (variables) et des méthodes (fonctions)
- Instance = objet créée à partir d'une classe
- Attribut = Variable
- Méthode = Fonction
La visibilité d'un attribut ou d'une méthode indique à partir d'où on peut y avoir accès.
- Public = accessible partout
- Protected = accessible par la classe et ses enfants uniquement
- Private = accessible par la classe uniquement
Exemple :
<?php
class Personne
{
public $nom ;
protected $prenom ;
private $_age ;
}
$toto = new Personne() ;
// Fonctionne car l'attribut est public
$toto->nom ;
La notation PEAR indique les conventions suviantes :
- Attribut ou méthode privé précédé d'un "_" : $_attribut
- Le nom d'une classe commence par une majuscule
<?php
class NomClasse
{
private $_attribut = 5;
protected $attribut = "toto";
public $attribut = "bonjour";
public function nomFonction(paramètre) // Méthode
{
//...
}
}
<?php
$variable = new NomClasse() ;
- Utiliser l'opérateur "->" : objet -> méthode();
<?php
$objet->methode() ;
- Getter : méthode dans la classe permettant d'afficher un attribut (porte le nom de l'attribut)
<?php
class Personne
{
private $_nomAttribut="Toto";
public function nomAttribut()
{
return $this->nom ;
}
}
$toto = new Personne() ;
echo $toto->nomAttribut() ; //affiche le nom
- Setter : permet de gérer la modification un attribut (porte le nom : setAttribut)
<?php
class Personne
{
private $_nom="Toto";
public function setNom($name)
{
$this->nom = $name ;
}
}
$toto = new Personne() ;
$toto->setNom('Dupont') ; // Modifie l'attribut "nom" de l'objet $toto par "Dupont"
- Permet de structurer la création d'une instance, en par exemple pré-remplissant les champs souhaités
- Lors d'une instanciation, le constructeur est automatiquement appelé
<?php
class Personne
{
public function __construct($name)
{
$this->nom = $name ;
}
}
$toto = new Personne("Dupont") ; Crée l'instance $toto avec pour attribut Nom = "Dupont"
- Permet à la méthode de connaître l'attribut qui est dans sa classe (peu importe sa visibilité)
<?php
class NomClasse
{
protected $attribut = "chainedecaractères" ;
public function __construct($parametre)
{
$this->attribut = $parametre ;
}
}
$instance = new NomClasse("parametre") ; // Crée l'instance avec comme valeur de $attribut = $parametre
Interaction entre les objets : par exemple, nous voulons une méthode frapper() qui inflige des dégâts à un autre joueur (un autre objet).
<?php
class Personnage
{
private $_degats; // Les dégâts du personnage.
private $_experience; // L'expérience du personnage.
private $_force; // La force du personnage (plus elle est grande, plus l'attaque est puissante).
public function frapper($persoAFrapper)
{
$persoAFrapper->_degats += $this->_force;
}
public function gagnerExperience()
{
// On ajoute 1 à notre attribut $_experience.
$this->_experience = $this->_experience + 1;
}
}
Descriptions :
- "$personAFrapper->degats" : on veut assigner une nouvelle valeur à l'attribut "$degats" du personnage à frapper
- "+= $this->force" : on donne la valeur que l'on souhaite assigner, on ajouter au dégat du perso2 la force du perso1 ($this).
Il est possible dans une méthode d'exiger en paramètre un objet : nomfonction(nomClasse $paramètre)
Par exemple, nous voulons que la fonction "frapper" est en paramètre uniquement une instance de Personnage. C'est à dire un objet de la classe Personnage.
<?php
class Personnage
{
// …
public function frapper(Personnage $persoAFrapper)
{
// …
}
}
L'opérateur de résolution de portée '::', appelé "double deux points" est utilisé pour appeler des éléments appartement à telle classe et non à tel objet.
-
Eléments statiques : attributs et méthodes appartenant à la classe
-
Constantes de classe : attribut dont la valeur est constante
A noter : une constante de prend pas de "$" devant son nom et est en majuscule
Pour accèder à une constante : NomClasse::Nom_Constante
Exemple :
<?php
class Personnage
{
private $_force;
// Déclarations des constantes en rapport avec la force.
const FORCE_PETITE = 20;
const FORCE_MOYENNE = 50;
const FORCE_GRANDE = 80;
public function __construct($forceInitiale)
{
// N'oubliez pas qu'il faut assigner la valeur d'un attribut uniquement depuis son setter !
$this->setForce($forceInitiale);
}
public function setForce($force)
{
// On vérifie qu'on nous donne bien soit une « FORCE_PETITE », soit une « FORCE_MOYENNE », soit une « FORCE_GRANDE »
if (in_array($force, [self::FORCE_PETITE, self::FORCE_MOYENNE, self::FORCE_GRANDE]))
{
$this->_force = $force;
}
}
}
//création du personnage avec une force moyenne
$perso = new Personnage(Personnage::FORCE_MOYENNE);
self::FORCE_PETITE : fait appel à la classe elle-même
Les méthodes statiques sont faites pour agir sur une classe et non sur un objet. La méthode ne doit donc pas utiliser $this.
- Syntaxe de création : public static function nomFonction() {}
- Syntaxe d'appel : Classe::nomFonction();
Exemple :
<?php
public static function parler()
{
echo 'Je vais tous vous tuer !';
}
Le principe est le même, c'est-à-dire qu'un attribut statique appartient à la classe et non à un objet. Ainsi, tous les objets auront accès à cet attribut et cet attribut aura la même valeur pour tous les objets.
- Syntaxe de création : private static $_nomAttribut ;
- Syntaxe d'appel dans une méthode : self::$_nomAttribut ;
-
Etape 1 : créer une classe avec comme attributs les champs de la BDD
-
Etape 2 : créer les getter et les setter pour ces attributs
Lorsqu'une méthode d'une classe mère est modifiée dans sa classe fille.
Lorsque la classe B (l'enfant) hérite de la classe A (le parent), la classe B hérite de l'ensemble des attributs et méthodes publiques de la classe A.
Les attributs étant en général privés, la classe B héritera uniquement des méthodes publiques.
Il faut procéder à un héritage quand on peut dire que B est un A (ex : un chien est un aniaml).
<?php
class Personnage
{
}
class Magicien extends Personnage // Magicien hérité des attributs et méthodes publiques de Personnage
{
}
Chaque classe peut créer des attributs et méthodes qui lui seront propres, en plus des attributs et méthodes hérités.
Si vous essayez d'accéder à un attribut privé de la classe parente, aucune erreur fatale ne s'affichera, seulement une notice si vous les avez activées disant que l'attribut n'existe pas.
Il est possible de réécrire les méthodes de la classe Parent dans la classe Enfant.
Il suffit d'appeler la méthode parente avec : parent::méthodeAAppeler();
Exemple
<?php
public function gagnerExperience()
{
parent::gagnerExpercience(); //On appelle la méthode gagnerExperience de la classe parente
if ($this->_magie < 100) {
// ...
}
}
/!\ : On ne peut redéfinir en PRIVATE une méthode qui était PUBLIC
- Permet d'empêcher qu'une classe soit instancier
- Utile si on veut faire de cette classe un modèle sans pour autant l'instancier
- Cette classe aura donc uniquement des enfants
Exemple :
<?php
abstract class Personnage // Notre classe Personnage est abstraite
{ /*...*/ }
class Magicien extends Personnage // Création d'une classe Magicien héritant de la classe Personnage
{ /*...*/}
$magicien = new Magicien(); // Tout va bien, la classe Magicien n'est pas abstraite.
$perso = new Personnage(); // Erreur fatale car on instancie une classe abstraite.
- Pour qu'une méthode soit abstraite il faut que la classe elle même soit abstraite
- Il ne pourra pas avoir de classe héritant de la classe Final
- Les classes enfants ne pourront pas redéfinir la méthode
- Permet d'accèder à un attribut ou une méthode sans instancier
Exemple :
<?php
class King {
public static function proclaim() {
echo "A kingly proclamation!";
}
}
King::proClaim(); // Fait appel à la méthode proClaim()
- Permet d'appeler les méthodes et attributs Static sans les instancier
- Simplifie la vie : exécute la méthode sans créer l'objet
<?php
class Boisson
{
public static function find($id)
{
//en SQL SELECT FROM Boissons WHERE id = $id;
return ...;
}
}
Boisson::find(12) ; // Affiche l'objet boisson dont l'id est 12 sans même créer une instance
$instance->attribut(qui est également une instance)->attribut
- Récupère tous les attributs et méthodes (sauf les privés)
-
Dans les méthodes normales on utilise $this
-
Dans les méthodes statics on utilise self::
<?php
class Math
{
const q = 1 ; //si cet attribut n'était pas static, la fonction suivante ne fonctionnerait pas
public static function sommeQ ($a, $b)
{
return $a + $b + self::q
}
Math::sommeQ(1 , 12); //Affichera 14
}
self:: est peu utilisé