PhalconPHP config.ini项目保留为字符串

时间:2018-10-03 17:25:31

标签: php string phalcon ini

我在config.ini中有一个项目,当我在代码中调用该项目时,该项目的前导零为item = "0001",Phalcon将其读取为int并删除了需要保留的前导零。当我调用它时,我曾尝试将其转换为字符串,但是Phalcon似乎已经删除了前导零。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

在第三个参数中使用INI_SCANNER_RAW

http://php.net/manual/en/function.parse-ini-file.php

答案 1 :(得分:0)

Phalcon\Config\Adapter\Ini内部使用PHP parse_ini_file。 Phalcon默认将值INI_SCANNER_RAW作为第三个参数(即扫描仪模式)传递。在任何情况下,Phalcon都使用自己的内部方法_cast 始终强制转换这些值。

您可以扩展Phalcon\Config\Adapter\Ini并覆盖_cast方法以获得所需的效果:

<?php

class RawIntConfig extends \Phalcon\Config\Adapter\Ini
{
    protected function _cast($val)
    {
        /* If the value is numeric, we conserve it as is (ie a string).
           Otherwise we cast it normally. */
        if ( is_numeric($val) )
            return $val;

        return parent::_cast($val);
    }
}


/*
    Let's do a couple of tests.
*/

/* INI_SCANNER_RAW has no effect with Phalcon because of _cast(..).
   Note that INI_SCANNER_RAW is the default mode anyway. */
$config = new \Phalcon\Config\Adapter\Ini('config.ini', INI_SCANNER_RAW);
echo 'Using \Phalcon\Config\Adapter\Ini:<br>';
var_dump($config);

/* Expected behaviour when using parse_ini_file directly. */
$config = parse_ini_file('config.ini', true, INI_SCANNER_RAW);
echo 'Using parse_ini_file with INI_SCANNER_RAW:<br>';
var_dump($config);

/* Expected behaviour and is usable with Phalcon. */
$config = new RawIntConfig('config.ini');
echo 'Using RawIntConfig:<br>';
var_dump($config);

您将获得类似的内容:

Test script output result