Page 1 sur 1
Foreach php4 vs php5
Posté : 05 nov. 2012, 13:06
par m76
Bonjour à tous,
je fais parti de la majorité silencieuse du forum mais là, en noob que je suis, je suis bloqué avec un script pour un CMS qui ne passe pas suite à une "migration" en php5 et qui me donne :"Invalid argument supplied for foreach()"...
un morceau du code :
$db->setQuery($q);
$rows = $db->loadObjectList();
$res = array();
foreach($rows as $row){
$row->dep = $this->getDep($row->id);
$res[] = $row;
}
return $res;
}
j'ai essayé différents trucs (vus ici ou ailleurs), mais au mieux j'ai juste le message d'erreur qui disparait.
En fait, il semblerait que la valeur soit nulle.
Comment faire pour que cela fonctionne comme avant ?
Merci d'avance

Re: Foreach php4 vs php5
Posté : 05 nov. 2012, 13:26
par dix2
salut,
avec PHP5, le objets sont passés par référence alors qu'en PHP4, c'est par valeur
donc il faut forcer la copie de l'objet :
$db->setQuery($q);
$rows = $db->loadObjectList();
$res = array();
foreach($rows as $row){
$row_copie = clone $row;
$row_copie->dep = $this->getDep($row_copie->id);
$res[] = $row_copie;
}
return $res;
@+
dix2
Re: Foreach php4 vs php5
Posté : 05 nov. 2012, 13:36
par m76
Ah ! ça marche
milles mercis =D>
Re: Foreach php4 vs php5
Posté : 05 nov. 2012, 15:02
par m76
... heu non en fait ça ne marche pas ou plus (c'est possible ?)

Re: Foreach php4 vs php5
Posté : 05 nov. 2012, 15:04
par dix2
quel est le message d'erreur ?
Re: Foreach php4 vs php5
Posté : 05 nov. 2012, 15:48
par m76
toujours le même :
Warning: Invalid argument supplied for foreach()
avec en référence la ligne du foreach
Re: Foreach php4 vs php5
Posté : 05 nov. 2012, 16:02
par dix2
avec ce code là:
$db->setQuery($q);
$rows = $db->loadObjectList();
$res = array();
if(is_array($rows){
foreach($rows as $row){
$row->dep = $this->getDep($row->id);
$res[] = $row;
}
}
return $res;
}
as-tu tjs l'erreur ?
Re: Foreach php4 vs php5
Posté : 05 nov. 2012, 16:09
par m76
là, il me met un parse error sur le premier crochet
Re: Foreach php4 vs php5
Posté : 05 nov. 2012, 16:25
par m76
(désolé un peu trop assisté sur ce genre de bug :'()
il manquait un ) à la fin de "if(is_array($rows)"
là je n'ai plus le parse error ni le message d'erreur, mais je n'ai plus le résultat d'avant (sous php4)
Re: Foreach php4 vs php5
Posté : 05 nov. 2012, 16:59
par dix2
et avec ça :
$db->setQuery($q);
$rows = $db->loadObjectList();
$res = array();
if(is_array($rows)){
foreach($rows as $row){
$row_copie = clone $row;
$row_copie->dep = $this->getDep($row_copie->id);
$res[] = $row_copie;
}
}
return $res;
Re: Foreach php4 vs php5
Posté : 05 nov. 2012, 17:05
par Ryle
Si le problème se situe au niveau du foreach(), c'est que c'est le tableau que tu lui passes en argument qui n'en est pas un. Probablement le même problème que celui signalé par dix2, mais sur le résultat de ta méthode loadObjectList() qui ne te retourne pas (plus ?) un tableau.
Tu peux faire un var_dump($rows) pour vérifier ce que celui-ci contient, mais à priori il faudrait regarder le traitement de cette méthode pour voir ce qui ne va pas

Re: Foreach php4 vs php5
Posté : 05 nov. 2012, 19:31
par m76
merci pour tes efforts dix2

malheureusement on a le même résultat
Ryle,
Null, c'est pas forcément bon ça ? XD
Re: Foreach php4 vs php5
Posté : 06 nov. 2012, 22:01
par moogli
Null, c'est pas forcément bon ça ? XD
Nan pas trop, comme déjà indiqué, par
Ryle il faut que tu revois le fonctionnement de ta méthode loadObjectList, ou alors bien prévoir ce cas
@+