parse_ini_file преобразует значения констант в строки, даже когда используется INI_SCANNER_TYPED - PullRequest
0 голосов
/ 21 июня 2019

INI_SCANNER_TYPED, используемый в качестве 3-го аргумента parse_ini_file (), должен сохранять логические, нулевые и целочисленные значения «когда это возможно», согласно документации

Однако, когда константы анализируются, значения преобразуются в строки. В документации неясно, ожидается ли это. Это, конечно, нежелательно, я не могу представить ни одного сценария, где это было бы полезно. Другие типы сканирования должны использоваться, если вы хотите преобразовать строку, не так ли?

Например, со следующим INI-файлом:

NUMBER = 1
TEXT = "1"
DEFINED_INTEGER_CONSTANT = FOO
DEFINED_BOOLEAN_CONSTANT = BAR
UNDEFINED_CONSTANT = BAZ

Я использую следующий php-файл и получаю вывод в комментариях

<?php
declare(strict_types=1);
define("FOO", 123);
define("BAR", true);

$ini_file = parse_ini_file(__DIR__ . '/test.ini', false, INI_SCANNER_TYPED);

foreach($ini_file as $key => $value) {
    define($key, $value);
}

var_dump(NUMBER); // => int(1)
var_dump(TEXT); // => string(1) "1"
var_dump(DEFINED_INTEGER_CONSTANT); // => string(3) "123"
var_dump(DEFINED_BOOLEAN_CONSTANT); // => "1"
var_dump(UNDEFINED_CONSTANT); // => "BAZ"

Я не ожидаю и не хочу преобразования строк в 3-м и 4-м примерах. Могу ли я использовать parse_ini_file для анализа констант без преобразования строк, или мне нужно сделать это по-другому? Это как-то связано с предложением «где возможно» в документации? По какой-то причине здесь невозможно сохранить оригинальные типы?

Использование PHP версии 7.1.

...