Visibilité
Là où PHP4 laissait tous vos attributs et méthodes
de classe publiques, vous pouvez avec PHP5 limiter la visibilité
de ceux-ci, à l'aide de trois mots-clés : public,
protected et private.
public : équivalent
du mot-clé var de PHP4,
il indique que l'attribut peut être appelé et
modifié par l'ensemble du programme, même depuis
l'extérieur de la class. C'est le type par défaut.
protected : l'attribut de
ne peut être utilisé que depuis sa propre classe
ou ses classes héritées.
private : l'attribut ne peut
être utilisé que depuis sa propre classe.
Tous ces types sont valables pour les méthodes, avec
la syntaxe suivante :
public function renvoyerHeure() {
}
Méthodes spéciales
Nous regroupons sous cette appellation les méthodes
__tostring(), __construct()
et son pendant __destruct().
__tostring() : permet de
définir un texte à afficher lorsque le programme
essaye d'afficher directement l'objet (echo
$xavier, par exemple), ce qui est plus explicite que
le Object renvoyé par défaut.
__construct() : avec PHP4,
pour initialiser des attributs ou lancer des méthodes
dès la création de l'objet, il fallait que la
classe dispose d'un méthode éponyme. Avec PHP5,
l'équivalent est de passer par ce constructeur. Cette
méthode prend en arguement les attributs définis
lors de l'instanciation de la classe.
__destruct() : inversement,
le destructeur permet de terminer toute activité initiée
par l'objet, quand celui-ci est détruit (par exemple
avec unset()).
Référence
Hors les modifications de base que nous venons de voir, le
mode de fonctionnement de l'Objet a aussi été
revu, notamment le passage des objets. Avant de lire plus
loin, il faut savoir manipuler les
référence en PHP.
C'est une différence fondamentale entre la version
4 et la version 5 de PHP : PHP4 passe les objets par copie
par défaut, et par référence avec l'opérateur
&, tandis que PHP5 les
passe par référence implicitement. Le passage
par référence étant plus "naturel",
beaucoup de scripts PHP l'utilisent... scripts qui ne marcheront
donc probablement plus aussi bien avec PHP5.
Exemple : en PHP4, le code suivant
class Personne {
var $nom;
function Personne($nom) {
$this-> = $nom;
}
function afficheNom() {
echo "Nom=$this->nom";
}
}
$cedric = new Personne("Cédric");
$cedric2 = $cedric;
$cedric2->nom = "Sylvain";
$cedric->afficheNom();
$cedric2->afficheNom();
donne ceci :
Nom=Cédric
Nom=Sylvain
En clair : l'objet $cedric
n'est que copié dans $cedric2,
et chacun a désormais des caractéristiques propres.
En ajoutant l'opérateur &
$cedric = new Personne("Cédric");
$cedric2 = &$cedric;
$cedric2->nom = "Sylvain";
$cedric->afficheNom();
$cedric2->afficheNom();
le résultat est différent :
Nom=Sylvain
Nom=Sylvain
 |
Forum |
|
Réagissez
dans les forums
de JDN Développeurs
|
Nous travaillons donc, au travers de $cedric2,
sur $cedric. Outre l'aspect
"naturel" du passage par référence,
il offre également de meilleures performances et consomme
moins en mémoire. Il est donc devenu implicite avec
PHP5 :
class Personne {
public $nom;
function __construct($nom) {
$this-> = $nom;
}
function afficheNom() {
echo "Nom=$this->nom";
}
}
$cedric = new Personne("Cédric");
$cedric2 = $cedric;
$cedric2->nom = "Sylvain";
$cedric->afficheNom();
$cedric2->afficheNom();
Ce ne sont là que les plus flagrantes modifications
apportées au modèle objet de PHP5. Nous aurons
l'occasion d'y revenir.
|