Uncaught DOMException: не удалось выполнить 'define' для 'CustomElementRegistry': это имя уже использовалось с этим реестром

Просто хотел добавить к красноречивому объяснению Джона причину, почему это не удается. Это все потому, что при создании массива php преобразует ключи в целые числа & mdash; если он может & mdash; что вызывает проблемы поиска на массивах, которые были переданы объектам, просто потому, что цифровой ключ сохранен. Это проблематично, потому что все параметры доступа к ресурсам ожидают или конвертируют в строки. Вы можете подтвердить это, выполнив следующие действия:

$arr = array('123' => 'abc');
$obj = (object) $arr;
$obj->{'123'} = 'abc';
print_r( $obj );

, которые будут выводиться:

stdClass Object ( 
  [123] => 'abc', 
  [123] => 'abc'
)

Таким образом, у объекта есть две клавиши свойств, одна цифра (к которой невозможно получить доступ ) и одна строка. Вот почему Jon #Fact 4 работает, потому что, устанавливая свойство с помощью фигурных скобок, вы всегда определяете строковый ключ, а не числовой.

Принимая решение Джона, но поворачивая его на голову , вы можете сгенерировать объект из вашего массива, который всегда имеет строковые ключи, выполнив следующее:

$obj = json_decode(json_encode($arr));

Теперь вы можете использовать любое из следующих действий, потому что доступ таким образом всегда преобразует значение внутри фигурной скобки до строки:

$obj->{123};
$obj->{'123'};

Хороший старый нелогичный PHP ...

1
задан bhagya 16 January 2019 в 07:00
поделиться

0 ответов