Aller au contenu

Erreur Fatale avec preg_replace_callback


MS-DOS_1991

Sujets conseillés

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à ? :wacko: )

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);
...
}

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 ? :smartass:

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 :(

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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 :wacko:

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 :hypocrite:

Lien vers le commentaire
Partager sur d’autres sites

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 MySQLi

function 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é par Jeromnimo
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...