IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

关于PHP中配置文件的定义

PHPor 的blog 2012-06-17 17:46:12 累计浏览 2,551 次
本机暂存

定义方法1:
----- conf.php ------

<?php
 $conf = "hello world";
?>

引用配置文件:
----- test.php ------

<?php
test();
function test() {
 include("conf.php");    
 echo $conf;
}
?>
---------------------
分析:
如果代码就这么简单,我们发现程序工作的很好,但是:
1. 如果$conf文件很大,每次都include势必浪费很多时间
2. 如果把include修改为include_once,则情况就会变得怪异了; 如果外部不小心include的了一次conf.php ,则test中不再执行conf.php,则test() 不能正常工作; 如果保证外面没有include("conf.php"); 则test() 第一次可以工作正常,第二次就无法正常工作,因为第二次执行test()函数并没有执行conf.php,也就没有$conf变量
3. conf.php 中 $conf 变量的作用域是不固定的,依赖于conf.php 的执行环境,所以简单地把 $conf看做是global的,更是容易犯错误的

结论: 这样写配置文件很容易犯错误,所以不要这样定义配置文件

定义方法2:
------- conf.php -----

<?php
$GLOBALS["conf"] = "hello phpor";
?>
引用配置文件:
------- test.php -------

<?php
test();
function test() {    
 include_once("conf.php");
 echo $GLOBALS["conf"]; }
?>

分析:
1. 配置文件包含进来之后,将一直占用内存空间,所以配置文件不宜太大,不过一般都不太太大
2. 为了提高效率,这里最好使用include_once, 而不是include
3. 这种写法不管怎么调用都不会有问题
4. 需要注意一点的是: 如果配置文件确实很大,解析该配置文件需要10毫秒, 而且不是每次请求都会用到大部分配置,或许整个请求之间只用到了其中1/10的配置,但是还是不得不耗费10ms来解析整个配置文件; 如果确实这这种情况,不妨考虑第三种配置方法

定义方法3:
------- conf.php ------

 
<?php
class conf {
 private static $cache = array();
 public static function get($alias) {
  if (isset(self::$cache[$alias]))
   return self::$cache[$alias];    
  $method = "get_$alias";    
  if (!method_exists(self, $method))
   return array();
  return self::$method();  
 }  

 private static function get_conf1() {
  return self::$cache["conf1"] = "hello phpor";
 }
 
 private static function get_conf2() {
  return self::$cache["conf2"] = "maybe this is a big array";
 }
}
?>

引用配置文件:
------- test.php -------

<?php
include_once("conf.php");  // 对于应用了PHP加速器的程序来讲,因为conf.php中没有包含就执行的语句,所以使用include或者include_once也没什么区别
test();
function test() {   
 var_dump(conf::get("conf1"));
}
?>

分析:
1. 这种办法似乎规避了前两种写法的所有缺点
2. 我们还可以在配置文件中添加一些逻辑,避免代码的重复

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 使用gettext来支持PHP的多语言 (累计阅读 39,270)
  2. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,164)
  3. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,408)
  4. 我的PHP,Python和Ruby之路 (累计阅读 13,149)
  5. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,790)
  6. 15个最好的免费开源电子商务平台 (累计阅读 12,541)
  7. Redis消息队列的若干实现方式 (累计阅读 12,088)
  8. 到底什么是MVC? (累计阅读 11,868)
  9. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,709)
  10. Rolling cURL: PHP并发最佳实践 (累计阅读 11,488)