Миграция с PHP 7.1.x на PHP 7.2.x json_decode () изменить - PullRequest
0 голосов
/ 24 мая 2018

В официальном документе указано:

Опция функции json_decode (), JSON_OBJECT_AS_ARRAY, теперь используется, если второй параметр (assoc) равен NULL.Ранее JSON_OBJECT_AS_ARRAY всегда игнорировался.

Этот код (AFAIK) выполняет это изменение и условие:

<?php

$an_object = new StdClass();
$an_object->some_atrribute = "value 1";
$an_object->other_atrribute = "value 2";

//an object
print_r($an_object);

$encoded = json_encode($an_object);

//here (null is passed in the second parameter)
$output = json_decode($encoded,null,512);

//using 7.2 should be array, however it is an object
print_r($output);

//array
$output = json_decode($encoded,true);
print_r($output);

Однако только последняя печать печатается как массив.

Я что-то не так понимаю?

1 Ответ

0 голосов
/ 24 мая 2018

Проверьте подпись функции :

mixed json_decode ( string $json [, bool $assoc = FALSE 
  [, int $depth = 512 [, int $options = 0 ]]] )

options

Параметры битовой маски JSON-декодирования.В настоящее время есть два поддерживаемых варианта.Первый - JSON_BIGINT_AS_STRING, который позволяет приводить большие целые числа к строке вместо значений с плавающей запятой, что является значением по умолчанию.Второй параметр - JSON_OBJECT_AS_ARRAY, который имеет такой же эффект, как установка assoc на TRUE.

Это означает, что вы можете установить четвертый параметр на JSON_OBJECT_AS_ARRAY, даже если вы по какой-то причине не установили параметр second на true, а вместо этого установите null.Но значение этого четвертого параметра по умолчанию равно 0, что означает отсутствие преобразования (из объекта в массив), если только второй параметр установлен на null.

Вот сокращенная демонстрационная версия , показывающая разницу:

$an_object = new StdClass();
$an_object->attr = 'value';

$encoded = json_encode($an_object);
print_r( json_decode($encoded, true, 512, JSON_OBJECT_AS_ARRAY)  );
print_r( json_decode($encoded, false, 512, JSON_OBJECT_AS_ARRAY) );
print_r( json_decode($encoded, null, 512, JSON_OBJECT_AS_ARRAY)  );

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

...