今天把网站配置文件转为OO方式过程中遇到问题,没搞明白,记录一下。
原配置文件config.php如下:
<?php
/**
* Config File
* ROOT : 该系统Web应用程序所在目录
* ROOTAB : 该系统Web应用程序所在目录,绝对路径
* CACHEENABLE : 用于设定动态缓存是否开启,true为开启,false关闭
* CACHEDIR : 动态缓存目录
*/
define('ROOT','/myphp/');
define('ROOTAB',$_SERVER['DOCUMENT_ROOT'].APPROOT);
define('CACHEENABLE',true);
define('CACHEDIR','./Cache/');
?>
修改为App.inc.php如下:
<?php
/**
* 此Web应用程序公共类
* 用于设置某些站点配置
*/
abstract class App {
/**
* $mROOT : 该系统Web应用程序所在目录
* $mROOTAB : 该系统Web应用程序所在目录,绝对路径
* $CACHEENABLE : 用于设定动态缓存是否开启,true为开启,false关闭
* $CACHEDIR : 动态缓存目录
*/
//const mROOT = '/myphp/';
//const mROOTAB = $_SERVER['DOCUMENT_ROOT'].self::mROOT; //出错,why???
//const mCACHEENABLE = true;
//const mCACHEDIR = './Cache/';
static $mROOT = '/myphp/';
static $mROOTAB = '';
//static $APPROOTAB = $_SERVER['DOCUMENT_ROOT'].self::$mROOT; //出错,why???
static $mCACHEENABLE = true;
static $mCACHEDIR = './Cache/';
static function Set() {
self::$mROOTAB = $_SERVER['DOCUMENT_ROOT'].self::$mROOT;
}
}
App::Set();
?>
无论用类常量还是用类静态变量的方式给mROOTAB直接赋值为$_SERVER['DOCUMENT_ROOT'].self::$mROOT这样的形式都出错,但是放到Set()函数里却可以,所以最后调用了App::Set()勉强实现。
为什么会出错?
本文分享了将PHP配置文件从传统方式转换为面向对象(OO)方式的过程及遇到的问题。详细介绍了如何定义抽象类来封装配置信息,并通过实例演示了解决在设置绝对路径时出现的错误。
402

被折叠的 条评论
为什么被折叠?



