在PHP中管理全局范围数据和设置的推荐方法?

时间:2011-04-22 12:13:31

标签: php global-variables scope global-scope

在PHP开发几年后,我看到并听到了存储“全局范围数据”(全局,常量,ini / XML / YML文件,数据库,单例属性......)的各种方法。

“全球范围数据”,我的意思是:

  • 全球应用程序/项目设置如
    • 数据库配置
    • SMTP,FTP参数
  • 数据库标识符(例如,在DB中定义的特定语言或国家/地区的主键值)
  • 全局运行时设置,例如
    • 启用日志记录/调试
    • 环境是dev / test / prod

...一旦检索就不应该更改,并且需要在项目代码的任何部分轻松访问。

某些全局数据可能需要存储为关联数组(因此不能声明为常量) 例如:每种语言的日期格式。顺便说一下,我看到这个other SO question关于数组常量,但是除了在需要数组常量值的地方使用unserialize之外,是否有更易读的东西?

我的主要问题是:您建议正确存储(我的意思是干净,可读,可靠)全球范围数据的方式是什么,为什么(优点/缺点)?

感谢。

4 个答案:

答案 0 :(得分:2)

正如我所说,使用INI文件管理所有配置的最佳方式。

E.g。我正在创建一个configuration.ini文件,它存储我的所有系统配置,如数据库信息,网址等...

host_name="localhost";
database_name="my_database";
database_user="root";

在阅读时,你只需要使用php默认函数

在php中解析这个ini文件
$configuration = parse_ini_file("path/to/configuration.ini");

答案 1 :(得分:2)

您可以按照自己喜欢的方式存储设置。我偏爱PHP数组或INI文件。

完成后,编写一个全局可用的访问者类。你可以根据需要制作单身,但不是真的需要。

此类将解析您的设置存储并创建内部数据结构。只需确保您没有任何setter,以便无法覆盖数据。看看Zend如何实现它的Zend_Config类。这就是我所说的:http://framework.zend.com/manual/en/zend.config.html

确保您的访问者类在全球范围内可用,以便您可以随时获取设置。

答案 2 :(得分:2)

您可以查看Zend_Config以获取最常见的配置。

  • 数组(仅限php,立即但分散且难以阅读)
  • ini (易于手写阅读)
  • xml (详细而且难以处理但非常灵活)
  • json (非常容易阅读,如果你想直接通过js访问它也可以很棒)
  • yaml (基本上直接编写序列化数组)

当然,数组似乎是最直接和最简单的解决方案,因为它是纯PHP并且不需要任何特殊的解析器或编写器。

另一方面,其他格式也有明显的优势。 Zend_Config文档编写了关于ini文件的示例。

  

INI格式专门用于   提供两种能力   配置数据键的层次结构   和配置之间的继承   数据部分。配置数据   层次结构受支持   用点或分隔键   句号(“。”)。

使用常量不是一个好主意,因为:

  1. 您的应用程序不需要一直查看所有配置选项
  2. 更重要的是,你不能嵌套常量,嵌套对配置来说非常重要。

答案 3 :(得分:1)

parse_ini_file

; This is a sample configuration file
; Comments start with ';', as in php.ini

[first_section]
one = 1
five = 5
animal = BIRD

[second_section]
path = "/usr/local/bin"
URL = "http://www.example.com/~username"

; This is an array
[third_section]
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"

同时将其添加到INI文件(文件中的第一行)有助于确保其安全:

;<?php die("<br /><br /><br /><br /><br /><h3>404 Not Found</h3><br /><br />The requested resource could not be found."); ?>
;Secure INI file