Некоторый код, который я использовал, не полагаясь на многое, теперь создает объект с двумя свойствами с одинаковыми именами.
Я даже не думал, что было бы возможно иметь два свойства с одним и тем же именем и разнымизначения.
У меня есть функция, которая преобразует массив в объект класса.Этот метод отлично работал для очень многих приложений, и я никогда не сталкивался с этой проблемой stange.
Ниже приведена функция с добавленными var dumps и die (), чтобы остановить выполнение только для того, чтобы получить выходные данные первого объекта.чтобы показать вам, ребята.
Параметры (массив указан ниже, class = "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;
}
OUTPUT: исходный массив, заголовки используются для ключа/ Имена свойств, результирующий объект класса.
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
Как видите, объект класса заканчивается двумя свойствами с точно таким же именем.Как это возможно?Как определяется объект класса:
namespace FA;
class WheelImage
{
var $image;
var $brand;
var $wheel;
}
ПРИМЕЧАНИЕ. Заголовки поступают из файла 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