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
Modérateur
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
Modérateur
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
Modérateur
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 :-)