array_filter + transmission de variable dans une fonction callback - PHP - Programmation
Marsh Posté le 12-06-2006 à 11:25:29
Dans d'autres langages tu utiliserait des closures, mais PHP n'ayant pas de notion de closures (ni de fonctions en tant que first-class objects, et toutes ses fonctions étant globales de toute façon) tu n'as --je pense -- d'autre choix que d'utiliser une variable globale que tu set avant chaque array_filter
Ou alors si PHP peut créer des objets callables ou des conneries du même style (genre si tu peux callbacker sur une méthode) tu crées un objet de filtrage.
Edit: je viens de regarder, les objets PHP5 ont une magic method "__call", mais c'est équivalent à un method_missing: c'est le truc appelé pour overloader n'importe quelle méthode, et pas un moyen d'émuler la callabilité sur un objet
Marsh Posté le 12-06-2006 à 11:46:10
Merci d'avoir prêter attention à la question déjà.
Ensuite, quand tu dis tu set une variable globale, tu veux dire quoi exactement ? global $kikou; dans la fonction ?
Parce que ça ne change rien. La variable doit quand même être déclarée avant la fonction quoi qu'il arrive.
Ah, je complête en disant que mon script doit être compatible PHP4.
En PHP5, ce serait différent.
Marsh Posté le 12-06-2006 à 11:49:41
Code :
|
$kikou n'est toujours pas transmis.
Il n'existe donc aucun moyen de transmettre une valeur différente de $kikou au cours de mon script.
Marsh Posté le 12-06-2006 à 12:02:25
Hermes le Messager a écrit : Merci d'avoir prêter attention à la question déjà. |
Chez moi ça marche (enfin je fais tourner ça sur wamp, donc sur PHP5, global a été modifié entre php4 et php5?)
Code : |
Array ( [0] => 10 [1] => 12 [2] => 14 [3] => 16 ) |
Hermes le Messager a écrit : En PHP5, ce serait différent. |
J'vois pas en quoi
Marsh Posté le 12-06-2006 à 12:03:59
Code :
|
Je ne garanti rien sur la qualite de cette *chose*
(pas teste etc)
Marsh Posté le 12-06-2006 à 12:10:33
[controverse]L'autre solution ce serait d'utiliser un vrai langage [/controverse]
Marsh Posté le 12-06-2006 à 12:24:49
masklinn a écrit : Chez moi ça marche (enfin je fais tourner ça sur wamp, donc sur PHP5, global a été modifié entre php4 et php5?)
|
Ah vi, tiens, ton exemple marche. J'ai du merder quelque part.
Un grand merci à toi.
Je suis en train de faire une BDD entièrement en PHP sans SQL, XML ou quoi que ce soit d'autre (pour des applications modestes, ça va de soi), et les boucles de + de 10 000, enfin bref, tu vois quoi.
Pratique de pouvoir faire des tests sur un tableau entier. Par contre, reste à voir en terme de perf ce que ça donne.
Marsh Posté le 12-06-2006 à 12:56:36
Hermes le Messager a écrit : Je suis en train de faire une BDD entièrement en PHP sans SQL, XML ou quoi que ce soit d'autre (pour des applications modestes, ça va de soi), et les boucles de + de 10 000, enfin bref, tu vois quoi. |
Ben j'te souhaite bien du plaisir
Spoiler : pervers |
edit: t'avais pas mis de ";" après ton "global $kikou", 10 contre 1 que ça vient de là mais que PHP est trop stupide pour te le dire
(genre il a décidé que finalement il allait pas définir la fonction, un truc du style)
Marsh Posté le 12-06-2006 à 16:09:52
Un grand merci à toi Masklinn, ça marche nikel.
Marsh Posté le 30-06-2010 à 16:01:47
J'ai a peu près le meme soucis que Hermes à l'exception que j'aimerais bien :
- 1./ transmettre une variable (un objet) dans la fonction callback
- 2./ et exploiter sa valeur pour faire mes calculs dans la fonction callback
Comme cela a été suggéré, j'ai essayé de déclarer la variable $machine en global dans la fonction callback mais son contenu est vide dans la fonction callback.
Code :
|
Comment dois je m'y prendre ?
Je suis en PHP5 par contre
Marsh Posté le 30-06-2010 à 16:16:46
Sinon, ça doit être possible avec create_function http://www.php.net/manual/fr/funct [...] nction.php
Code :
|
Marsh Posté le 30-06-2010 à 16:18:16
http://www.php.net/manual/fr/function.array-walk.php
Regarde le 3e paramètre de la fonction ...
Marsh Posté le 30-06-2010 à 16:42:30
Paulp a écrit : http://www.php.net/manual/fr/function.array-walk.php |
Pfff , pourquoi n'ai je pas mieux regarder la doc de la fonction
Merci beaucoup Paulp pour ta réactivité. Cela fonctionne nickel.
Paulp a écrit : Sinon, ça doit être possible avec create_function http://www.php.net/manual/fr/funct [...] nction.php
|
Ahh oui, très bonne piste par contre j'ai une erreur comme quoi l'objet ne peut pas être converti en String.
Je ne suis pas étonné. J'étais surpris de ton code '.$machine.' pour passer l'objet à la fonction.
A ma connaissance, je pense qu'il existe 2 moyens :
- passer en paramètre l'objet machine sérialiser
- ou en plus propre, passer l'adresse de l'objet machine. (ca par contre je ne sais pas faire )
Marsh Posté le 30-06-2010 à 16:47:48
oui, ou bien utiliser $machine->memory qui est, a priori, une valeur numerique donc convertissable en string directement
Code :
|
Marsh Posté le 30-06-2010 à 22:00:03
oui tu as raison, cela peut etre une solution. Je vais tester cela au taff ta 2ème solution par curiosité.
Marsh Posté le 06-07-2010 à 10:35:29
Hermes le Messager a écrit : Mon problème est simple : Considérons cet exemple :
Question : Comment faire dans le cadre d'un appel à une fonction callback pour transmettre une valeur de $kikou ? J'ai regardé la doc de fond en comble, et aucun exemple. Est-ce au moins possible ? |
Code : |
Edit : erf, je viens seulement de voir la date du 1er message -__- (m'enfin, ça pourra peut être servir à d'autres)
Marsh Posté le 12-06-2006 à 10:59:01
Mon problème est simple :
Considérons cet exemple :
Question : Comment faire dans le cadre d'un appel à une fonction callback pour transmettre une valeur de $kikou ?
J'ai regardé la doc de fond en comble, et aucun exemple. Est-ce au moins possible ?