Bonjour, j'ai poste un petit post sur le forum sourceforge ici
http://sourceforge.net/forum/forum.ph ... d=1561098&forum_id=347994Mais bon je suis vraiment pas sur que ce je dis en anglais soit super comprehensible donc si y en a dans le coin qui ecrivent un peu mieux l'anglais que moi ca serait pas mal ...
J'explique le pb.
C'est simple on ne peut pas heriter des classes du kernel de xoops qui ont un handler, c'est a dire les classes du kernel qui ont des acces aux base de donnée. Pour etre plus precis on peut pas heriter de leur handler.
Je veux modifier un petit truc sur les privmessages par exemple, je cree betement une classe etendant la classe de base, et du coup un handler etendant aussi la classe handler de base. J'ai juste un truc a modifier et je fais cela proprement dans un module pour ne pas aller toucher les classes du kernel.
Et la on tombe sur un pb, dans une bonne partie des methodes des classes handler du kernel, on teste a chaque fois que l'objet passe en parametre fait partie de la classe X.
Le hic c'est que lors d'un heritage de la classe et du handler, automatiquement mon objet passé en parametre fait partie de la classe fille (X') et non de la classe attendue par le handler...
Vous voyez meme en Français c pas tres clair ;)
Avec du code c peut-etre plus simple.
Je cree une classe customPM qui etends la classe du kernel Privmessage
class CustomPM extends XoopsPrivmessage
{
...
}
je cree aussi le handler qui va bien qui herite du handler de XoopsPrivmessage
class XoopsCustomPMHandler extends XoopsPrivmessageHandler
{
...
}
Toutes les methodes que je surcharge ok, ca se passe bien par contre les methodes que je veux utiliser sans modif par rapport XoopsPrivmessageHandler, la ca marche pas!!!!
Pourquoi? ben simplement par ce que il y a un test de fait sur le nom de la classe de l'objet. Exemple methode insert du handler
class XoopsPrivmessageHandler extends XoopsObjectHandler
{
...
function insert(&$pm)
{
if (strtolower(get_class($pm)) != 'xoopsprivmessage') {
return false;
}
....
}
...
}
Alors oui je pourrais recopier le code complet de XoopsPrivmessageHandler et juste modifier ce dont j'ai besoin c'est clair, mais alors la du coup a quoi ca sert de faire de l'objet
Donc pour moi il ne faut pas faire de test ici sur le nom de la classe sinon cela veut dire qu'on peut pas heriter (etendre) ces classes, il faut faire un test sur le fait que l'objet en parametre est soit de la classe soit d'une classe fille.
A priori d'apres une reponse que j'ai eu par is_a() on doit y arriver (pas encore tester mais pas de raison que ca soit pas bon)
Donc normalement ca devrait donner ca
class XoopsPrivmessageHandler extends XoopsObjectHandler
{
...
function insert(&$pm)
{
if (!is_a($pm, 'xoopsprivmessage')) {
return false;
}
....
}
...
}
Voilà, en français ca doit etre a peu pres clair
Si quelqu'un se sent de le faire en anglais