在PHP开发几年后,我看到并听到了存储“全局范围数据”(全局,常量,ini / XML / YML文件,数据库,单例属性......)的各种方法。
“全球范围数据”,我的意思是:
...一旦检索就不应该更改,并且需要在项目代码的任何部分轻松访问。
某些全局数据可能需要存储为关联数组(因此不能声明为常量)
例如:每种语言的日期格式。顺便说一下,我看到这个other SO question关于数组常量,但是除了在需要数组常量值的地方使用unserialize
之外,是否有更易读的东西?
我的主要问题是:您建议正确存储(我的意思是干净,可读,可靠)全球范围数据的方式是什么,为什么(优点/缺点)?
感谢。
答案 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并且不需要任何特殊的解析器或编写器。
另一方面,其他格式也有明显的优势。 Zend_Config文档编写了关于ini文件的示例。
INI格式专门用于 提供两种能力 配置数据键的层次结构 和配置之间的继承 数据部分。配置数据 层次结构受支持 用点或分隔键 句号(“。”)。
使用常量不是一个好主意,因为:
答案 3 :(得分:1)
; 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