DÉBUT DE CLASSE ABSTRAITE POUR UNE MEILLEUR GESTION DES PROPRIÉTÉS

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 25 juil. 2005 à 10:57
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 25 déc. 2005 à 18:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32862-debut-de-classe-abstraite-pour-une-meilleur-gestion-des-proprietes

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
25 déc. 2005 à 18:23
En fait cette class s'inspire de la class XoopsObject et XoopsObjectHandler de xoops... elles permettent la manipulation de données issu de requetes MySQL mais d'une part ces class ne s'utilisent pas toutes seule (mais avec les class générant les requetes) et d'autre part ces class sont les class parentes de class plus complete qui ne concerne qu'une table de la base de donné car elle prennent en compte la structure de la table et les attributs des champs afin d'obtenir un meilleur traitement des données...

par ex la class XoopsUser qui hérite des propriétés de la class XoopsObject et qui est faite pour la table users de xoops... voici sont constructeur...

function XoopsUser($id = null)
{
$this->initVar('uid', XOBJ_DTYPE_INT, null, false);
$this->initVar('name', XOBJ_DTYPE_TXTBOX, null, false, 60);
$this->initVar('uname', XOBJ_DTYPE_TXTBOX, null, true, 25);
$this->initVar('email', XOBJ_DTYPE_TXTBOX, null, true, 60);
$this->initVar('url', XOBJ_DTYPE_TXTBOX, null, false, 100);
$this->initVar('user_avatar', XOBJ_DTYPE_TXTBOX, null, false, 30);
$this->initVar('user_regdate', XOBJ_DTYPE_INT, null, false);
$this->initVar('user_icq', XOBJ_DTYPE_TXTBOX, null, false, 15);
$this->initVar('user_from', XOBJ_DTYPE_TXTBOX, null, false, 100);
$this->initVar('user_sig', XOBJ_DTYPE_TXTAREA, null, false, null);
$this->initVar('user_viewemail', XOBJ_DTYPE_INT, 0, false);
$this->initVar('actkey', XOBJ_DTYPE_OTHER, null, false);
$this->initVar('user_aim', XOBJ_DTYPE_TXTBOX, null, false, 18);
$this->initVar('user_yim', XOBJ_DTYPE_TXTBOX, null, false, 25);
$this->initVar('user_msnm', XOBJ_DTYPE_TXTBOX, null, false, 100);
$this->initVar('pass', XOBJ_DTYPE_TXTBOX, null, false, 32);
$this->initVar('posts', XOBJ_DTYPE_INT, null, false);
$this->initVar('attachsig', XOBJ_DTYPE_INT, 0, false);
$this->initVar('rank', XOBJ_DTYPE_INT, 0, false);
$this->initVar('level', XOBJ_DTYPE_INT, 0, false);
$this->initVar('theme', XOBJ_DTYPE_OTHER, null, false);
$this->initVar('timezone_offset', XOBJ_DTYPE_OTHER, null, false);
$this->initVar('last_login', XOBJ_DTYPE_INT, 0, false);
$this->initVar('umode', XOBJ_DTYPE_OTHER, null, false);
$this->initVar('uorder', XOBJ_DTYPE_INT, 1, false);
// RMV-NOTIFY
$this->initVar('notify_method', XOBJ_DTYPE_OTHER, 1, false);
$this->initVar('notify_mode', XOBJ_DTYPE_OTHER, 0, false);
$this->initVar('user_occ', XOBJ_DTYPE_TXTBOX, null, false, 100);
$this->initVar('bio', XOBJ_DTYPE_TXTAREA, null, false, null);
$this->initVar('user_intrest', XOBJ_DTYPE_TXTBOX, null, false, 150);
$this->initVar('user_mailok', XOBJ_DTYPE_INT, 1, false);

// for backward compatibility
if (isset($id)) {
if (is_array($id)) {
$this->assignVars($id);
} else {
$member_handler =& xoops_gethandler('member');
$user =& $member_handler->getUser($id);
foreach ($user->vars as $k => $v) {
$this->assignVar($k, $v['value']);
}
}
}
}

Comme vous pouvez le voir chaque attribut de la table est initialisé via la méthode initvar en spécifiant différents attributs... à savoir... le nom de la variable $key

$this->vars[$key] = array(

'value' => sa valeur,
'required' => si elle require un formatage html en sortie,
'data_type' => le type de données,
'maxlength' => longueur max si besoin est,
'changed' => si la variable à étée modifiée,
'options' => option d'utilisation
);

Voili voilou... je sais pas si j'ais été clair... muarf... sinon n'hésitez pas à poser des questions... .. .

@ tchaOo°
JeanPoldeux Messages postés 64 Date d'inscription mardi 14 janvier 2003 Statut Membre Dernière intervention 5 août 2005
5 août 2005 à 00:12
Pas mal mais très cpp.

L'idée de MALALAM de donner un exemple d'utilisation ne serait pas de trop.

Perso, même au niveau config, je ne vois pas trop l'intérêt de passer par une classe pour savoir si une var a été initialisée ou pour changer sa valeur.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 juil. 2005 à 17:08
cs_Zart Messages postés 285 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 27 juin 2006 1
25 juil. 2005 à 16:28
Je savais même pas qu'il y avait de l'héritage en PHP (grâce à la v5 surement).
Sinon est-ce que ça existe les interfaces ce serait pas mal util ou bien peut on faire du multi héritage ?
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 juil. 2005 à 10:57
hello,

je serais toi, je rajouterais un exemple concret d'utilisation de ta classe. Concret, mais exemple neanmoins hein, un truc bidon.
Parce que la je pense que c'est vraiment trop...abstrait :-)

Sinon, bien, c'est la premiere fois que je vois sur CS un code utilisant une classe abstraite :-)
Rejoignez-nous