MS-DOS_1991 Posté 4 Octobre 2006 Posté 4 Octobre 2006 Bonjour à tous J'ai découvert la fonction preg_replace_callback il y a peu de temps, et l'utilise pour gérer le parsing d'un portail en xml... En gros, pour chaque noeud de mon fichier, j'appelle la fonction parsePortalBlockContent qui est définie dans ma classe Forum Le problème est que cette fonction appelle une autre méthode de la classe Forum qui elle-même utilise une méthode de la classe Database dont la variable dans la classe Forum est $db (euh... tout le monde suite là ? ) class Forum{private $db // ==> contient la classe Database qui gère la base de Donnée en MySQLifunction autre_methode($arg){ return $this->db->query("SELECT .........");}function parsePortalBlockContent ( ... ){ ... $sql_result = $this->autre_methode($arg); ...} et mon appel de callback se fait ainsi: <?php if ($block->parse_content != 1) : echo $block->content; else : echo preg_replace_callback('!\{(.*)\|(.*)\}!', array('Forum', 'parsePortalBlockContent'), $block->content); endif; ?> Le problème est que PHP m'affiche une superbe Erreur Fatale: Fatal error: Using $this when not in object context in ... on line ...... Une idée ? P.S: J'ai essayé de remplacer $this->autre_methode() par self::autre_methode() mais cela ne marche que pour les méthodes de classe, pas pour les variables comme $db
Jeromnimo Posté 4 Octobre 2006 Posté 4 Octobre 2006 Bonjour, je pense que cela vient du fait que la classe n'est pas instanciée quand tu fais appel à la fonction, mais que c'est un appel à une méthodes statique qui est fait (ce que tu fais en remplaçant $this-> par self: Je pense que la meilleure solution serait d'implémenter ta méthode de parsing du portal dans ta classe forum, ainsi le contexte serait déjà là, et il ne devrait plus y avoir de problème...
MS-DOS_1991 Posté 4 Octobre 2006 Auteur Posté 4 Octobre 2006 Merci de ta réponse Je pense que la meilleure solution serait d'implémenter ta méthode de parsing du portal dans ta classe forum, ainsi le contexte serait déjà là, et il ne devrait plus y avoir de problème... Le problème est que c'est déjà le cas class Forum{ private $db // ==> contient la classe Database qui gère la base de Donnée en MySQLi function autre_methode($arg) { return $this->db->query("SELECT ........."); } function parsePortalBlockContent ( ... ) { ... $sql_result = $this->autre_methode($arg); ... } } Ou alors je t'ai mal compris
Jeromnimo Posté 4 Octobre 2006 Posté 4 Octobre 2006 (modifié) Oui en fait je ne me suis pas très bien exprimé... class Forum{private $db // ==> contient la classe Database qui gère la base de Donnée en MySQLifunction autre_methode($arg){return $this->db->query("SELECT .........");}function parsePortalBlockContent ( ... ){...$sql_result = $this->autre_methode($arg);...}function parse_content($a_content){return preg_replace_callback('!\{(.*)\|(.*)\}!', array('Forum', 'parsePortalBlockContent'), $a_content);} et au niveau de l'appel, il faut que ta classe soit instanciée auparavant quelquepart... <?php$forum = new Forum(); if ($block->parse_content != 1) : echo $block->content; else : echo $forum->parse_content($block->content)); endif; ?> je pense que comme ça ça devrait fonctionner puisque la classe sera instanciée et donc l'ensemble des variables membres allouées... Modifié 4 Octobre 2006 par Jeromnimo
MS-DOS_1991 Posté 4 Octobre 2006 Auteur Posté 4 Octobre 2006 Bon je me suis débrouillé comme tu me l'as conseillé et ça marche Merci beaucoup
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant