PHP:从属性文件初始化常量

时间:2012-11-02 05:16:49

标签: php constants

让我把要求放在第一位

一个PHP网关,以及一组请求处理程序,它们使用当前我在constants.php define('conts','value');中定义的许多常量

我可以在属性文件中定义这个常量,比如

const1 =val1
const2 = val2
const3 = val3

在某个外部文件中说gateway.properties并在运行时将其加载到define()。这可能是一次性操作,因此php创建的线程可以进一步访问此常量,而不再重新加载它吗?

我不知道这是否真的可行,我想要一个专家建议。

由于

5 个答案:

答案 0 :(得分:1)

我会通过在memcached中填充结果对象来处理这个问题。

显然有一些开销。您需要权衡它是否适合您的情况。对于3个变量,它根本没有意义。对于300,000,也许会。测试一下,看看。

答案 1 :(得分:1)

在PHP中,最好使用.ini文件并使用

http://php.net/manual/en/function.parse-ini-file.php 或者php.net/manual/en/function.parse-ini-string.php,如果你已经将文件读入字符串。

您可以使用apc将其缓存到内存中,如果尚未缓存,则使用回退来读取文件,然后缓存它。

<?php
$ini = apc_fetch('configuration');
if (!$ini) {
    $ini = file_get_contents('path/to/ini.ini');
    if ($ini) {
        apc_store('configuration',$ini);
    }
}
$config = parse_ini_string($ini);

答案 2 :(得分:0)

你可以读取每一行,解析出=并在for循环中定义。

答案 3 :(得分:0)

最简单的方法是将您的值存储在.ini文件中,然后使用parse_ini_file()读取该文件。 ini文件看起来像:

var1 = 'blah blah blah'
var2 = 'more blah'

PHP很快就会读取这些文件。我建议,不要将所有值都转换为常量,而是将从.ini文件中获得的关联数组存储在单个全局变量中。让工作,同样的可见性。

如果您真的设置了缓存,则可以使用APC缓存。它会节省几毫秒,但除非你在谈论一组相当大的值,否则它不会有所作为。如果您要坚持将它们全部转换为常量,那么您仍然需要为每个值调用define()。保存单个全局关联数组的速度要快得多。

答案 4 :(得分:0)

考虑使用全局易于访问的静态类 您可以创建仅包含公共静态成员的类,CLASS :: init()调用可选配置文件来替换变量 如果缺少值,它将保持默认值 因此,您可以使用CLASS:$ STATIC_VAR

从任何位置访问配置

init函数:

            $vars = parse_ini_file(dirname(__FILE__) .'/'. $filename,true,INI_SCANNER_TYPED);
            if ($vars)
            {
                foreach ($vars as $key => $val) 
                {
                        if (property_exists(get_called_class(),$key)) self::$$key=$val;
                }
            }