【发布时间】:2019-11-04 12:45:00
【问题描述】:
根据documentation,INI_SCANNER_TYPED 用作 parse_ini_file() 的第三个参数,应“尽可能”保留布尔值、空值和整数值
但是,当解析常量时,值会转换为字符串。文档不清楚这是否会发生。这当然是不可取的,我无法想象这会有用的单一场景。当你想进行字符串转换时,肯定会使用其他扫描类型吗?
例如下面的ini文件:
NUMBER = 1
TEXT = "1"
DEFINED_INTEGER_CONSTANT = FOO
DEFINED_BOOLEAN_CONSTANT = BAR
UNDEFINED_CONSTANT = BAZ
我使用以下 php 文件并在 cmets 中获取输出
<?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"
我既不期望也不希望第三个和第四个示例中的字符串转换。我可以使用 parse_ini_file 来解析常量而不进行字符串转换,还是我需要以另一种方式执行此操作?这与文档中的“尽可能”条款有关吗?由于某种原因,这里无法保留原始类型吗?
在 PHP 7.1.26 和 7.3.7 中测试。
【问题讨论】:
标签: php parsing ini type-coercion