2010-11-30 6 views
0

J'essaie de créer un système de modèle pour un site Web sur lequel je travaille. J'essaie d'utiliser preg_replace pour appeler une fonction pour traiter les données entourées par certaines balises. Par exemple, process ('date') retournera la date du jour et sera mis dans le code $ date $. J'utilise preg_replace pour trouver les chaînes que j'ai besoin de modifier, mais je ne peux pas appeler la fonction - PHP semble penser que la fonction est une propriété à la place.preg_replace traite une fonction comme une propriété

C'est le code que je utilise:

$view = preg_replace("/\$_([a-zA-Z0-9_]+)_\$/e", "$this->process('\\1')", $view); 

Ceci est l'erreur que je reçois:

Avis: Undefined property: ClassName :: processus $ en /location/ClassName.class.php sur la ligne X

J'espère que j'ai suffisamment expliqué cela. Comment puis-je obtenir preg_replace pour exécuter le processus en tant que méthode, au lieu d'essayer de l'afficher en tant que propriété?

+0

'$ this' est-il dans la bonne portée quand il remplace la chaîne? – stillstanding

+0

Je crois que ... Je peux ajouter une ligne echo $ this-> process ('date'); au-dessus du preg_replace et cela fonctionne. – Wige

Répondre

1

Je suggère d'utiliser preg_replace_callback au lieu de preg_replace vu que preg_replace_callback est conçu pour ce que vous essayez réellement de faire. Un problème possible que vous pourriez avoir est l'accessibilité de la portée/fonction. Si votre code qui appelle preg_replace n'a pas accès à la fonction que vous essayez d'appeler, vous pourriez obtenir cette erreur puisque PHP ne trouve pas la fonction et peut être par défaut à la traiter comme un paramètre. Si la fonction n'est pas dans le même fichier que ce preg_replace, essayez de le mettre là pour voir s'il change quelque chose.

+0

La fonction est une méthode de la même classe que la méthode qui appelle preg_replace. J'envisageais d'utiliser preg_replace_callback, mais je n'étais pas sûr que la portée serait maintenue correctement. Serais-je l'appeler comme: preg_replace_callback ("/ \ $ _ ([a-zA-Z0-9 _] +) _ \ $ /", "this-> processus", $ view); ou comment pourrais-je indiquer la portée du processus? – Wige

+0

Après l'avoir testé, preg_replace_callback qui est soit appelé sur une fonction membre de la classe, soit passé une variable de classe ne fonctionnera pas du tout. Fondamentalement, tout ce qui utilise $ this dans preg_replace_callback renvoie une erreur, ce qui me ramène à essayer de faire fonctionner preg_replace. – Wige

+0

Essayez de remplacer votre méthode appelée par une méthode statique. J'ai vu cela auparavant et traite du fait que l'objet template appelle du code après le temps de compilation codé comme un objet mais n'est pas créé en tant qu'objet lorsque le code est appelé. –

Questions connexes