Test 1 - Valeur initiale : '["ROLE_USER"]' Test 2 - is_string : true Test 3 - json_decode : array ( 0 => 'ROLE_USER', ) Test 4 - json_last_error : 0 Test 5 - JSON_ERROR_NONE : 0 Logique du script : - Entré dans le premier if (is_string) - decodedRoles : array ( 0 => 'ROLE_USER', ) - json_last_error : 0 - JSON valide, on garde la valeur Résultat final : '["ROLE_USER"]' === Test avec array === Valeur initiale : array ( 0 => 'ROLE_USER', ) is_array : true Résultat final : '["ROLE_USER"]'