Un code sur lequel je m'appuyais beaucoup crée maintenant un objet avec deux propriétés qui ont le même nom.
Je ne pensais pas qu'il était possible d'avoir deux propriétés avec le même nom et des valeurs distinctes.
J'ai une fonction qui convertit un tableau en un objet de classe. Cette méthode a bien fonctionné pour de nombreuses applications et je n'ai jamais rencontré ce problème étrange auparavant.
Voici la fonction avec les var dumps ajoutés et un die() pour arrêter l'exécution juste pour obtenir la sortie du premier objet pour vous montrer les gars.
Le tableau de paramètres est présenté ci-dessous, classe = "FA \WheelImage ", namespace = "")
protected function arrayToClass($array, $class,$nameSpace=''){
$nameSpaceClassPrefix = (!empty($nameSpace))? "\\$nameSpace\\" : "";
if(!class_exists($nameSpaceClassPrefix . $class)){
echo "<br>ERROR: $class is not a valid object type!<br>";
return false;
}
echo "<pre>";
var_dump($array);
var_dump($this->headings);
$class_name = $nameSpaceClassPrefix . $class;
$class_object = new $class_name();
foreach ($array as $key => $value){
//note: this usually only works if the array is associative first so we have to set the key to be the heading
$key = $this->headings[$key];
//only assign if the class object has the property defined. Move out of condition if you the property created regardless of if the model defines it.
if(!$this->explicit_properties || property_exists($class_object, $key)){
if ($value=="false") $value = false;
if ($value=="true") $value = true;
if ($value=="null") $value = null;
$class_object->{$key} = $value;
}
}
var_dump($class_object);
die("stop");
return $class_object;
}
SORTIE : tableau original, intitulés utilisés pour les noms de clés/propriétés, l'objet classe résultant.
array(3) {
[0]=>
string(14) "TSW_bathurst_1"
[1]=>
string(3) "TSW"
[2]=>
string(8) "Bathurst"
}
array(3) {
[0]=>
string(8) "image"
[1]=>
string(5) "brand"
[2]=>
string(5) "wheel"
}
object(FA\WheelImage)#162 (4) {
["image"]=>
NULL
["brand"]=>
string(3) "TSW"
["wheel"]=>
string(8) "Bathurst"
["image"]=>
string(14) "TSW_bathurst_1"
}
stop
Comme vous pouvez le constater, l'objet classe se retrouve avec deux propriétés portant exactement le même nom. Comment cela est-il possible ? Comment l'objet classe est défini :
namespace FA;
class WheelImage
{
var $image;
var $brand;
var $wheel;
}
NOTE : Les titres proviennent d'un fichier csv :
//the csv file
image,brand,wheel
TSW_bathurst_1,TSW,Bathurst
TSW_bathurst_2,TSW,Bathurst
TSW_bathurst_3,TSW,Bathurst
TSW_bathurst_4,TSW,Bathurst
//how the headings are loaded
if ($has_headings) $this->headings = fgetcsv($file);//first row is headings