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.