Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 处理存储在配置文件中的变量的最佳实践是什么?_Php - Fatal编程技术网

Php 处理存储在配置文件中的变量的最佳实践是什么?

Php 处理存储在配置文件中的变量的最佳实践是什么?,php,Php,如果我使用配置文件来存储站点名、数据库主机等。。处理此问题的最佳做法是什么 $sitename=“stackoverflow.com”然后在函数中设置全局$sitename DEFINE(\u SITENAME,“stackoverflow.com”) function vars(){return array(sitename=>“stackoverflow”);} ? 我想要一个关于为什么我应该选择一个而不是另一个的技术解释 谢谢大家! 通常认为将应用程序级配置指令保存在单独的配置文本或XML

如果我使用配置文件来存储站点名、数据库主机等。。处理此问题的最佳做法是什么

  • $sitename=“stackoverflow.com”然后在函数中设置全局$sitename
  • DEFINE(\u SITENAME,“stackoverflow.com”)
  • function vars(){return array(sitename=>“stackoverflow”);}
  • ?
  • 我想要一个关于为什么我应该选择一个而不是另一个的技术解释


    谢谢大家!

    通常认为将应用程序级配置指令保存在单独的配置文本或XML文件中是“更好”的做法。您可以创建一个类,该类作为单个实例加载,用于解析文件并提供所需内容,例如:

    $config->get('DB_HOSTNAME');
    

    查看。

    您可以使用函数
    parse_ini_file
    parse_ini_string
    轻松地将配置数据作为ini文件导入。您的配置将以与php.ini相同的格式存储

    我倾向于使用define()进行“环境”配置,因为引用常量应该比调用新函数更快。这在概念上也与我所做的一致:

    /**
     * Set the application mode. Valid options are "development" and "production"
     */
    define('APP_MODE', 'development');
    
    // Database Host
    define('DB_HOST', 'localhost');
    

    另一个选项是使用ini文件(确保它们在web根目录中不是
    parse_ini_file()
    函数,尽管您应该只运行一次,然后使用单例访问变量。(实际上,您应该延迟加载它,仅在发出第一个请求时解析文件。)

    我喜欢使用define,因为它可以防止您以后意外更改常量。它还可以更容易地在代码中告诉您正在使用常量


    其他人提到了使用配置文件——这是一个好主意,但在大多数语言中,这样做的主要原因是您可以更改配置文件,而无需重新构建/部署应用程序。因为PHP不是一种编译语言,所以我看不到在PHP中使用ini或XML配置文件有什么实际好处。

    我喜欢使用全局单例对象,与karim79的建议一致,并让单例类的实现使用parse_ini_文件从一组.ini文件中读取配置。为每个服务器环境提供单独的.ini文件也是一种良好的做法,例如

    production.ini testlab.ini demoserver.ini


    然后,您可以根据当前主机名自动选择要加载的正确配置。处理这个问题的所有逻辑都应该放在singleton实现中。

    更多的是风格问题,因此不投票+/-。我对全局常量的问题是理解上下文。使用某种函数驱动的配置,您可以执行getConfig(“majorCategory.minorCategory.valueName”)。与使用定义常量的php文件相比,使用配置文件(如.ini或.xml)有什么好处?我来自编译语言背景,后者不是一种选择。所以我直观地实现了一个单独的配置文件。之后我意识到,在php中,我想不出这种方法比在单独的php文件中定义常量有什么好处。