但是,解析常量时,值将转换为字符串。该文档尚不清楚是否预期会发生这种情况。这当然是不可取的,我无法想象有一个有用的场景。当然,要进行字符串转换时,可以使用其他扫描类型吗?
例如,带有以下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版。