Cours/atelier PHP objet.
Réponse AJAX

Objectif

à rajouter : classes virtuelles. Est-ce que PHP renvoie une erreur lorsque'on essaie d'instancier une classe virtuelle ?

Créer une classe et l'instancier

La classe

La syntaxe pour créer une classe est la suivante :

Les propriétés

Ici on rajoute les propriétés nom, prénom et date de naissance :

Les méthodes

Ici on rajoute une méthode getAge, qui renvoie l'âge en fonction de la date de naissance (en supposant que la date de naissance est au format "1973-02-25"). Remarquez $this qui représente l'objet courant, et $this->dateDeNaissance qui permet d'accéder à une de ses propriétés :

Instanciation de la classe, mot-clé new

Voici le code qui permet d'instancier la classe, de définir le nom et la date de naissance, puis d'afficher l'âge. Remarquez le mot-clé new qui permet d'instancier :

Ajoutez une méthode getPatronyme() qui renvoie "Prénom NOM" :

Votre réponse n°1

Modifiez la méthode getAge() de façon à ce qu'elle renvoie "âge inconnu" lorsque la date de naissance a pour valeur null (utilisez is_null), et elle renvoie par exemple "32 ans" lorsque la date de naissance est connue.

Gérez le "s" du pluriel : "1 an", "2 ans", ...

Votre réponse n°2

Constructeurs et destructeurs

Constructeur PHP 4 (compatible PHP 5)

Voici un script qui ajoute un constructeur (PHP 4, compatible avec PHP 5) à la classe personne. Ici on se contente de positionner toutes les valeurs à null. Vous remarquez que le constructeur porte le même nom que la classe, c'est à ça que PHP reconnait que c'est le constructeur :

Constructeur PHP 5

Voici un constructeur PHP 5 (function __construct()), non-compatible avec PHP 4. En PHP 5, vous pouvez donc utiliser au choix l'une ou l'autre des écritures :

Constructeur PHP 4 paramétré (valable aussi pour la syntaxe PHP 5)

Et voici un script avec un constructeur qui reçoit cette fois-ci des paramètres (optionnels puisqu'on leur a donné une valeur par défaut grâce à =null). Remarquez les différentes instanciations, toutes valables :

Destructeur PHP 5

Les destructeurs n'existaient pas en PHP 4, il fallait créer une méthode quelconque et l'appeler manuellement (ce qui augmentait le risque d'oubli). Voici la syntaxe du destructeur en PHP 5 : Le Destructeur est appelé au moment où on détruit l'objet, c'est à dire :

Les accesseurs, le mot-clé protected

L'accesseur permet de lire et modifier une propriété indirectement grâce à une méthode dédiée (au lieu d'accéder directement à la propriété). Voici par exemple les accesseurs pour le nom de la classe personne. Remarquez le mot-clé protected qui interdit d'accéder directement à la propriété (il existe également private qui est encore plus restrictif,plus d'infos ici) :

Quel message d'erreur obtenez-vous si vous essayez d'accéder à une propriété déclarée comme private ?

Votre réponse n°3

Réécrivez la classe personne complète en créant des accesseurs pour le prénom et la date de naissance.

Votre réponse n°4

Les méthodes de classe, le mot-clé static

Ecrire et lire un objet dans une base de données MySQL

Introduction à ma méthode

Ecriture

Lecture

Dans votre base de données v_anonyme_db, créez une table pour accueillir les personnes ci-dessus.

À partir de la classe Personne ci-dessus, écrivez vos méthodes :
from_mysql(id) qui récupère l'objet depuis la base de données,
to_mysql() qui écrit ou modifie l'objet dans la base de données.

Remarque : ajoutez une propriété 'id'. Quand on crée une nouvelle personne, son id est null. C'est quand on l'écrit pour la première fois dans la base de données que mysql_choisit un ID automatique, qu'on affecte aussitôt à notre objet (de façon à garder synchronisées les données dans MySQL et en PHP).

Collez l'ensemble du code ici :

Votre réponse n°5

Héritage et redéfinition de méthodes

D'autres fonctions et mots-clés liés aux objets

Etc., toutes les fonctions ici : http://fr.php.net/manual/fr/ref.classobj.php

Exercice d'application : création d'une classe Collection

On veut écrire une classe Collection.

Elle dispose d'une propriété : un tableau $tab qui va stocker chaque valeur de la collection.

Son interface est composée des méthodes publiques suivantes :

Pour réaliser cela, vous utiliserez les fonctions PHP de traitement de tableau : count, array_pop, array_shift, reset, next.

Est-ce que la propriété $tab va être déclarée en public, protected ou private ? Pourquoi ?

Votre réponse n°6

Ecrivez le code entier de la classe.

Votre réponse n°7

Testez votre classe avec le code suivant. Le résultat affiché doit être : 12765.