2017-09-19 3 views
-1

Je suis en train de convertir cette fonction à preg_replace_callback mais presque tout ce que je donne essayé erreur:coincé avec preg_replace() à preg_replace_callback()

argument 2 requis, '$ db-> module', être un rappel valable dans

Voici mon code:

$this->template = preg_replace ("/#module\=(\w+)#/ie", "\$this->module('\\1')", $this->template); 

Toute idée comment convertir ..

+0

un rappel est une fonction, dont les paramètres et les valeurs de retour doivent être soigneusement choisis en ce qui concerne http://php.net/manual/fr/function.preg-replace-callback.php – Calimero

+0

Je vais rouvrir la question car c'est un cas particulier dans lequel une méthode de classe doit être utilisée la fonction de rappel. –

Répondre

2

Je réponds exceptionnellement à cette question parce que vous devez utiliser une méthode de classe. Ce n'est donc pas si simple que le million de réponses sur le sujet.

Une façon de le faire, changer le modèle d'une manière toute correspondance est le paramètre yourclass::module et passer un tableau avec $this et le nom de procédé en tant que second paramètre:

$this->template = preg_replace_callback('/#module=\K\w+(?=#)/i', array($this, module), $this->template); 

ou

$this->template = preg_replace_callback('/#module=\K\w+(?=#)/i', 'self::module', $this->template); 

Autre façon, garder le même modèle et utiliser l'astuce $that=$this;:

$that = $this; 
$this->template = preg_replace_callback('/#module=(\w+)#/i', function ($m) use ($that) { 
    return $that->module($m[1]); 
}, $this->template); 
+0

merci beaucoup! – Dikobraz