Perte variable en php?

Signaler
Messages postés
4270
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
4 mars 2021
-
Bonjour,
Bonjour à tous,

Voilà j ai un soucis en php et je ne comprends .. j'ai des cas où je perds la valeur de ma variable au moment d appeler une fonction .. voici un cas:

Je veux récuperer une valeur a partir d un alias en appelant la fonction statique "cValidation::getValue" qui prend l alias en premier parametre. get value fait un switch sur l alias pour renvoyer une valeur et renvoi "ERROR NO MAP <[alias]>" par defaut.

l appel :

     $num=$c['COL'];
     $nm=$c['DESCR'];
     $salias=$c['ALIAS'];
     if(substr($salias,0, 4) == 'SHPR' ? $bShr : true){
      if(!in_array($salias, array("INV_08","INV_06","INV_11","INV_09","INV_10","INV_07"))){     
       $val=cValidation::getValue($salias,$this,$o->localID);
       if(substr($val,0, 4) == 'ERRO'){
        $val.=$salias;
       } 
       if($val=='' && $salias == 'INV_04' && $mergeref == '1' && $binv){
        $val = cValidation::getValue('COR_17',$this,$o->localID);
       }     
       $aline[$nm] = $val;
      }
     } else {
       $aline[$nm] = '';
     }


la fonction getvalue (il y a plus d alias mais je l ai allegé) :

 public static function getValue(&$salias,$oFolder, $lineid=0){
  try {
      $s = $salias;
   switch($s){
    case 'SHPR_01':return $oFolder->oShipper->Company;break;
    case 'SHPR_03':return $oFolder->oShipper->VAT;break;
    case 'COR_22':return $oFolder->oImport[$lineid]->void;break;
    default: return 'ERROR NO MAP<'.$s.'>';
   }
  } catch(Exception $e){
   return '';
  }
  
 }


Il y un alias ( "COR_22" ) qui, lors de l appel devient vide .. vous remarquerez cette partie:
  
       $val=cValidation::getValue($salias,$this,$o->localID);
       if(substr($val,0, 4) == 'ERRO'){
        $val.=$salias;
       } 


je recopie l'alias dans $val si il y a une "ERROR ...".

Et donc, pour toute mes valeurs, aucuns soucis, mais pour "COR_22" je récupères:

ERROR NO MAP:<>COR_22

ce qui sous entend que dans la fonction, l alias est vide, alors que le parametre ne l etait pas ... je ne comprends pas. Dans le doute j ai tenté de passer par référence, de copier les valeur, mais rien ne change. La seule différence sur cet alias, c'est que j ai rajouté la ligne du switch dans get value que récement (mais je ne vois pas en quoi ca poserai probleme)

Des suggestions ? C'est un probleme connu?
C'est un soucis que j ai dans un second process. Mais en rajoutant des log, le soucis ne se pose plus (ce qui n a pas fonctionné pour le cas actuel)

merci d'avance

naga