La programmation orientée objet (ou POO) en PhP est de plus en plus présente. L'évolution du langage en lui même le montre, lors du passage de PhP 4 à PhP 5 des efforts ont été faits pour aller dans ce sens.
Les développeurs ont donc de plus en plus tendance à utiliser des classes et des objets mais, comme tout développeur qui se respecte, vous savez qu'en PhP les tableaux sont des outils très puissants. Ne serait-ce pas merveilleux si on pouvait cumuler les avantages des deux ? Et bien c'est possible.
L'interface ArrayAccess
Nous ne reviendrons pas sur ce qu'est une interface, vous le savez probablement et si vous ne savez pas, soit vous n'avez pas besoin de savoir pour l'utiliser, soit vous trouverez une description ailleurs.
L'interface ArrayAccess est donc une interface qui, lorsqu'elle sera implémentée, nous permettra d'ajouter des fonctionnalités propres aux tableaux à nos objets.
Elle comporte 4 méthodes :
-
offsetSet
-
offsetGet
-
offsetUnset
-
offsetExists
Leurs noms sont assez explicite pour se priver d'une description, voyons par l''exemple ce u'on peut en faire.
<?php
class MaClasse implements ArrayAccess
{
private $nom;
private $prenom;
function getNom(){
return $this->nom
}
function offsetSet($offset, $value){
$offset = strtolower($offset);
switch($offset){
case 'nom':
case 'prenom':
$this->{$offset} = $value;
break;
default :
throw new Exception('Undifined offset '.$offset,1);
}
return true;
}
function offsetGet($offset){
$offset = strtolower($offset);
switch($offset){
case 'nom':
case 'prenom':
return $this->{$offset};
default :
throw new Exception('Undifined offset '.$offset,1);
}
}
function offsetUnset($offset){
$offset = strtolower($offset);
switch($offset){
case 'nom':
case 'prenom':
$this->{$offset} = null;
default :
throw new Exception('Undifined offset '.$offset,1);
}
}
function offsetExists($offset){
$offset = strtolower($offset);
switch($offset){
case 'nom':
case 'prenom':
return true;
default :
return false;
}
}
}
?>
Une fois notre classe définie, on peut facilement utiliser notre objet comme un tableau :
<?php
$variable = new MaClasse();
$variable['nom'] = 'mon nom';
$variable['Prenom'] = 'mon prenom';
if(array_key_exists('adresse',$variable)){
echo 'Il y a une adresse'
}
else{
echo 'Il n'y a pas d\'adresse';
}
unset($variable['prenom']);
?>
Facile non ? Votre objet est maintenant accessible comme un tableau. Si vous aviez une application qui manipulait des tableaux en PhP et que vous souhaitez lui ajouter des fonctionnalités, il est donc facile de définir une classe implémentant l'interface ArrayAccess et de remplacer les tableaux par des objets.
Conclusion ?
Ce n'est qu'une première étape dans notre procédé de croisement entre tableaux et objets. Tout décrire en une fois aurait été trop long alors la suite dans un prochain article.