Je souhaite utiliser une fonction qui prend comme argument un tableau d'objets et je ne peux modifier le comportement de cette fonction.
Pierre. ----- posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le web. Pour signaler un abus:
nico
Tu trouveras si dessous une implémentation de la fonction array2object que j'ai bricolé en lisant ton post avec une bout de test. J'espère que ça correspondra à ton besoin.
bonne soirée.
<?php //************************* class Dummy{}; function &array2object(&$arr) { $ser = ''; $ctr = 0; foreach($arr as $k => $badcopy) { $ser .= serialize($k).serialize(&$arr[$k]); $ctr++; } return unserialize('O:5:"Dummy":'.$ctr.':{'.$ser.'}'); } //************************* FIN
//test class tst { var $tst; function tst($val) { $this->tst = $val; } } $arr1 = array("p1" => 1, "p2" => "toto", "p3" => new tst(30) ); $o = &array2object($arr1);
Tu trouveras si dessous une implémentation de la fonction array2object que
j'ai bricolé en lisant ton post avec une bout de test.
J'espère que ça correspondra à ton besoin.
bonne soirée.
<?php
//*************************
class Dummy{};
function &array2object(&$arr)
{
$ser = '';
$ctr = 0;
foreach($arr as $k => $badcopy)
{
$ser .= serialize($k).serialize(&$arr[$k]);
$ctr++;
}
return unserialize('O:5:"Dummy":'.$ctr.':{'.$ser.'}');
}
//************************* FIN
//test
class tst
{
var $tst;
function tst($val) { $this->tst = $val; }
}
$arr1 = array("p1" => 1, "p2" => "toto", "p3" => new tst(30) );
$o = &array2object($arr1);
Tu trouveras si dessous une implémentation de la fonction array2object que j'ai bricolé en lisant ton post avec une bout de test. J'espère que ça correspondra à ton besoin.
bonne soirée.
<?php //************************* class Dummy{}; function &array2object(&$arr) { $ser = ''; $ctr = 0; foreach($arr as $k => $badcopy) { $ser .= serialize($k).serialize(&$arr[$k]); $ctr++; } return unserialize('O:5:"Dummy":'.$ctr.':{'.$ser.'}'); } //************************* FIN
//test class tst { var $tst; function tst($val) { $this->tst = $val; } } $arr1 = array("p1" => 1, "p2" => "toto", "p3" => new tst(30) ); $o = &array2object($arr1);
foreach ($tab as $key => $val) { $obj->$key = $val;
écrit plutôt: foreach ($tab as $key => $copy) { $obj->$key = &$tab[$key];
Ce qui évitera, si $tab référence/contient des objets (et ça a l'air d'être ton cas), de les cloner. (rappel: la contrainte est php 4.3.x).
c pas plus compliqué que ca. ça se complique ... ;)
marc.quinton-PAS-DE-
Cleo wrote:
$obj = new stdClass ;
Juste une petite modif, à la place de:
foreach ($tab as $key => $val) { $obj->$key = $val;
écrit plutôt: foreach ($tab as $key => $copy) { $obj->$key = &$tab[$key];
Ce qui évitera, si $tab référence/contient des objets (et ça a l'air d'être ton cas), de les cloner. (rappel: la contrainte est php 4.3.x).
c pas plus compliqué que ca.
ça se complique ... ;)
dans le meme genre, il y en a plein ;-)
$obj = & new MaBelleClasse(); function &retourne_reference($foobar); function une_reference_en_entre($id, &$ref); # function reference_initialise($id, &$ref = ''); # impossible
plus simplement
$obj1 = & $obj2;
effectivement le foreach est un truc vache, il y a aussi quelque fonctions de manipulation de liste qui effectue du clonage si mes souvenirs sont bons.
je me rappelle avoir bien galéré sur une classe Composite qui avait les methode apply('method', $arg) et aplly_deep();
il était assez difficile de voir ou il y avait eu clonage ou pas clonage ; enfin je m'en suis sorti et c'est tellement instructif de galérer.
Cleo wrote:
$obj = new stdClass ;
Juste une petite modif, à la place de:
foreach ($tab as $key => $val) {
$obj->$key = $val;
écrit plutôt:
foreach ($tab as $key => $copy) {
$obj->$key = &$tab[$key];
Ce qui évitera, si $tab référence/contient des objets (et ça a l'air d'être
ton cas), de les cloner.
(rappel: la contrainte est php 4.3.x).
c pas plus compliqué que ca.
ça se complique ... ;)
dans le meme genre, il y en a plein ;-)
$obj = & new MaBelleClasse();
function &retourne_reference($foobar);
function une_reference_en_entre($id, &$ref);
# function reference_initialise($id, &$ref = ''); # impossible
plus simplement
$obj1 = & $obj2;
effectivement le foreach est un truc vache, il y a aussi quelque
fonctions de manipulation de liste qui effectue du clonage si mes
souvenirs sont bons.
je me rappelle avoir bien galéré sur une classe Composite qui
avait les methode apply('method', $arg) et aplly_deep();
il était assez difficile de voir ou il y avait eu clonage ou pas
clonage ; enfin je m'en suis sorti et c'est tellement instructif
de galérer.
foreach ($tab as $key => $val) { $obj->$key = $val;
écrit plutôt: foreach ($tab as $key => $copy) { $obj->$key = &$tab[$key];
Ce qui évitera, si $tab référence/contient des objets (et ça a l'air d'être ton cas), de les cloner. (rappel: la contrainte est php 4.3.x).
c pas plus compliqué que ca.
ça se complique ... ;)
dans le meme genre, il y en a plein ;-)
$obj = & new MaBelleClasse(); function &retourne_reference($foobar); function une_reference_en_entre($id, &$ref); # function reference_initialise($id, &$ref = ''); # impossible
plus simplement
$obj1 = & $obj2;
effectivement le foreach est un truc vache, il y a aussi quelque fonctions de manipulation de liste qui effectue du clonage si mes souvenirs sont bons.
je me rappelle avoir bien galéré sur une classe Composite qui avait les methode apply('method', $arg) et aplly_deep();
il était assez difficile de voir ou il y avait eu clonage ou pas clonage ; enfin je m'en suis sorti et c'est tellement instructif de galérer.
NOSPAM_p_genieys
Cleo wrote:
écrit plutôt: foreach ($tab as $key => $copy) { $obj->$key = &$tab[$key];
Merci à vous deux pour cette réponse.
Pierre. ----- posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le web. Pour signaler un abus:
Cleo wrote:
écrit plutôt:
foreach ($tab as $key => $copy) {
$obj->$key = &$tab[$key];
Merci à vous deux pour cette réponse.
Pierre.
-----
posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le
web. Pour signaler un abus: abuse@usenetgratuit.com