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:
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:
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):
// 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.