Poster une réponse  Créer un sujet 
[PHP5] Simuler des accesseurs
Auteur Message
CrazyCat
Administrator
*******


Messages : 130
Groupe : Administrateurs
Inscription : Feb 2007
Statut : Absent
Réputation : 0
Message : #1
[PHP5] Simuler des accesseurs

Ceci est une copié éhontée de http://virginie.mathey.co.uk/index.php?2...urs-en-php parce que je ne tient pas à perdre ce tutorial

Tout développeur sait qu'après l'écriture des attributs d'une classe vient la fastidieuse tâche de rédaction des accesseurs. Alors, plutôt que de perdre son temps à faire un get et un set par attribut pourquoi ne pas simuler les accesseurs et en écrire seulement deux génériques ?

Pour ce faire, il faut connaître la méthode __call de PHP. Cette dernière permet d'attraper tout appel à une méthode inexistante.

L'exemple de code suivant permet d'accèder aux attributs lastname, firstname et age en simulant les get et set correpondant:

La class utils qui simule les accesseurs:

Code PHP :
abstract class utils
{
        public function __call( $_method, $_attributes )
        {
                $prefix = substr( $_method, 0, 3 );
                $suffix = substr( $_method, 4 );
                $c_attributes = count( $_attributes );
               
                if( property_exists( $this, $suffix ) )
                {
                        if( $prefix == 'set' && $c_attributes )
                        {
                                return $this->set( $suffix, $_attributes[0] );
                        }
                        if( $prefix == 'get' && !$c_attributes )
                        {
                                return $this->get( $suffix );
                        }
                }
               
                else
                {
                        trigger_error( "The method ". $_method ." does not exist",
                                                E_USER_ERROR );
                }
        }
}


La classe possèdant les attributs:
Code PHP :
require 'utils.php'

class user extends utils
{
        // Attributs

        protected $lastname;
        protected $firstname;
        protected $age;

        // Get et Set génériques

        public function get( $_v )
        {
                return $this->$_v;
        }

        public function set( $_v, $_a )
        {
                $this->$_v = $_a;
        }
}


Création d'un objet et accès aux attributs (appel des accesseurs simulés):
Code PHP :
// Création d'un objet user
$paul = new user();

// Affectation des attributs
$paul->set_lastname( "dupont" );
$paul->set_firstname( "arnaud" );
$paul->set_age( 25 );

// Lecture des attributs
echo "Nom: " . $paul->get_lastname() . "
"
;
echo "Prénom: " . $paul->get_firstname() . "
"
;
echo "Age: " . $paul->get_age() . "
"
;


Note: La classe utils étant une classe abstraite tous les attributs privés (plutôt que protected) n'auront pas d'accesseurs simulés.


L'erreur est humaine, mais il faut un ordinateur pour provoquer une catastrophe
23/10/2007 15:13
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Poster une réponse  Créer un sujet 

Voir une version imprimable
Envoyer ce sujet à un ami
S'abonner au sujet | Ajouter le sujet aux favoris

Aller à :