今天把网站配置文件转为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()勉强实现。
为什么会出错?