Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

une methode en guise de callback

10 réponses
Avatar
Etienne SOBOLE
salut.

dans une méthode, j'utilise la fonction preg_replace_callback qui appelle
une fonction chaque fois que le pattern est trouvé.

comment puis-je faire pour que cet appel n'aye (?!) pas vers une fonction
(global) mais plutot vers une methode de la classe.

en gros j'ai
class toto
{
function f1()
{
...
preg_replace_callback($pattern, ?????, $string);
...
}

function f2($matches)
{
}
}

par quoi le remplace ????? pour ca appele f2.
eventuellement, f2 peut etre une methode static, ca ne me dérange pas outre
mesure...

mais meme toto::f2 ne marche pas !

c'est possible???
merci

10 réponses

Avatar
Bobe
Etienne SOBOLE nous a dit le 24.02.2006 14:50:
salut.

dans une méthode, j'utilise la fonction preg_replace_callback qui appelle
une fonction chaque fois que le pattern est trouvé.

comment puis-je faire pour que cet appel n'aye (?!) pas vers une fonction
(global) mais plutot vers une methode de la classe.



Salut,

Il faut passer un tableau avec le nom de la classe et celui de la
méthode, ou bien l'objet instanciant la classe et le nom de la méthode.

Plus d'infos à cette adresse:
http://fr.php.net/manual/fr/language.pseudo-types.php#language.types.callback


--
Aurélien Maille

Avatar
CrazyCat
Etienne SOBOLE wrote:
dans une méthode, j'utilise la fonction preg_replace_callback qui appelle
une fonction chaque fois que le pattern est trouvé.
comment puis-je faire pour que cet appel n'aye (?!) pas vers une fonction
(global) mais plutot vers une methode de la classe.
mais meme toto::f2 ne marche pas !


Heu, je vais peut-être dire une bétise, mais $this->f2() ne
fonctionnerait pas?

--
Aide informatique: http://help-info.forumactif.com
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net

Avatar
flconseil
Il faut utiliser la syntaxe suivante pour désigner ta fonction :

Fonction non statique dans l'objet appelant :

array($this,'function')

Fonction dans un autre objet existant :

array($object,'function')

Fonction statique dans la même classe :

array(__CLASS__,'function')

Fonction statique dans une autre classe :

array('classe','function')

Dans ton exemple :

preg_replace_callback($pattern,array($this,'f2'),$string);
Avatar
Etienne SOBOLE
Il faut passer un tableau avec le nom de la classe et celui de la méthode,
ou bien l'objet instanciant la classe et le nom de la méthode.
Plus d'infos à cette adresse:
http://fr.php.net/manual/fr/language.pseudo-types.php#language.types.callback


Merci....

M'enfin si ca c'est pas tordu comme méthode je veux bien y laisser une
couille...
je pense qu'ils ont un bon sujet d'amélioration pour le PHP6 ;)

Etienne

Avatar
ftc
salut.

dans une méthode, j'utilise la fonction preg_replace_callback qui appelle
une fonction chaque fois que le pattern est trouvé.

comment puis-je faire pour que cet appel n'aye (?!) pas vers une fonction
(global) mais plutot vers une methode de la classe.

en gros j'ai
class toto
{
function f1()
{
...
preg_replace_callback($pattern, ?????, $string);
...
}

function f2($matches)
{
}
}

par quoi le remplace ????? pour ca appele f2.


Ca devrait fonctionner avec preg_replace_callback( $pattern, array(
$this, 'f2' ), $string ); pour une méthode de l'objet
et preg_replace_callback( $pattern, array( 'toto', 'f2' ), $string );
pour un appel statique

Avatar
Etienne SOBOLE
Heu, je vais peut-être dire une bétise, mais $this->f2() ne fonctionnerait
pas?


double non !!!
au mieux $this->f2 aurait pu marcher mais non !

en fait le php ne prend pas une fonction en tant que telle, mais une chaine
(ou un tableau visiblement ;) ) contenant le nom de la fonction comme
paramètre.

Etienne

Avatar
Olivier Miakinen

Il faut passer un tableau avec le nom de la classe et celui de la méthode,
ou bien l'objet instanciant la classe et le nom de la méthode.
Plus d'infos à cette adresse:
http://fr.php.net/manual/fr/language.pseudo-types.php#language.types.callback


M'enfin si ca c'est pas tordu comme méthode je veux bien y laisser une
couille...


Loin de moi l'envie d'atteindre à ta virilité, mais... tu aurais une
proposition pour une méthode plus simple ?

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)


Avatar
Etienne SOBOLE
Loin de moi l'envie d'atteindre à ta virilité, mais... tu aurais une
proposition pour une méthode plus simple ?


ben je sais pas, mais
la chaine toto::f2 semble plus logique non ?

sans parler effectivement du
this->f2 qui a priori parait pas mal non plus

l'idéal etant evidement que tout ca ne soit plus une chaine de caractère
mais directement un pointeur ou une référence sur une fonction...

Hummmmm,
Je sais pas si c'est a cause de mes questions relou du newsgroup auteur,
mais j'ai la sensation que tu m'en veux un peu aujourd'hui !!!

Etienne

Avatar
Olivier Miakinen

Loin de moi l'envie d'atteindre à ta virilité, mais... tu aurais une
proposition pour une méthode plus simple ?


ben je sais pas, mais
la chaine toto::f2 semble plus logique non ?


"toto::f2", donc.

Tu as parfaitement raison. C'était tellement simple que je n'y ai pas
pensé. En plus, il suffit de faire un explode("::", ...) pour retrouver
le tableau si c'est le format préféré en interne. Toutes mes excuses, donc.

sans parler effectivement du
this->f2 qui a priori parait pas mal non plus


Ça je le sens moins, vu que PHP est interprété et que l'on peut utiliser
un nom de fonction (ou de méthode) avant qu'il soit défini.

l'idéal etant evidement que tout ca ne soit plus une chaine de caractère
mais directement un pointeur ou une référence sur une fonction...


Oui, mais justement ça me semble difficile sans une compilation préalable.

Je sais pas si c'est a cause de mes questions relou du newsgroup auteur,
mais j'ai la sensation que tu m'en veux un peu aujourd'hui !!!


J'en suis désolé, d'autant que j'ai bien compris que tu n'étais pas
responsable du cahier des charges de ton client. Si cela peut te
rassurer, j'aurais répondu la même chose à n'importe qui d'autre.

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)


Avatar
Nicolas Krebs
Etienne SOBOLE écrivit dans l'article
news:43feebeb$0$6818$
dans news:fr.comp.lang.php

salut.


Bonjour,

dans une méthode, j'utilise la fonction preg_replace_callback qui appelle
une fonction chaque fois que le pattern est trouvé.

comment puis-je faire pour que cet appel n'aye (?!) pas vers une fonction
(global) mais plutot vers une methode de la classe.


Si c'est du subjonctif présent, c'est « aille ».