Динамически создаваемый объект класса php имеет два свойства с одинаковыми именами. Не могу понять, почему - PullRequest
0 голосов
/ 23 октября 2018

Некоторый код, который я использовал, не полагаясь на многое, теперь создает объект с двумя свойствами с одинаковыми именами.

Я даже не думал, что было бы возможно иметь два свойства с одним и тем же именем и разнымизначения.

У меня есть функция, которая преобразует массив в объект класса.Этот метод отлично работал для очень многих приложений, и я никогда не сталкивался с этой проблемой 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

1 Ответ

0 голосов
/ 23 октября 2018

Исправлено, просто создав новый CSV-файл и вручную введя заголовки CSV.Исходный файл был сохранен с помощью Excel.

Я предполагаю, что какая-то кодировка текста вызывала проблему.

Редактирование исходного файла путем удаления заголовков и повторного их ввода не работалоно создание нового файла и его распечатка устранили проблему.

Хотя я решил проблему, я все еще хотел бы услышать чьи-либо идеи о том, почему это произошло, и как заставить какой-то общий код игнорироватьлюбая странная кодировка текста в CSV-файле.

Я думаю, возможно, это могло бы быть лучшим ответом, если бы я был в ситуации, когда воссоздание исходного файла не было вариантом. Удалить не-utf8 символы из строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...