【问题标题】:parse_ini_file converts values of constants into strings, even when using INI_SCANNER_TYPEDparse_ini_file 将常量的值转换为字符串,即使使用 INI_SCANNER_TYPED
【发布时间】: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


    【解决方案1】:

    目前似乎没有办法让 parse_ini_file 以预期方式运行。

    我已报告此问题并已被验证为错误 - 请参阅 here。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      相关资源
      最近更新 更多