我有这段代码
class View
{
const DEFAULT_VIEWS_DIRECTORY = $_SERVER["DOCUMENT_ROOT"] . "views/";
}
但是,它给了我语法错误
解析错误:解析错误:语法错误,意外' $ _ SERVER'第17行的C:\ xampp \ htdocs \ classes \ View.class.php中的(T_VARIABLE)
我检查了manual,然后说
值必须是常量表达式,而不是(例如)变量,属性或函数调用。
有什么工作可以做我想要的吗?,因为我在课堂上大量消耗这个值,并且将此作为常量将使课程更漂亮
答案 0 :(得分:1)
正如您所注意到的,Expression不允许作为类常量值,但它不会阻止您启动默认视图目录一次并在不同场合使用它:
class View
{
private $defaultViewDirectory;
public function __construct()
{
$this->defaultViewDirectory = $_SERVER["DOCUMENT_ROOT"] . "views/";
}
public function getDefaultViewDirectory()
{
return $this->defaultViewDirectory;
}
}
或者你可以实现像:
这样的Singleton模式class View
{
private $defaultViewDirectory;
private function initDefaultViewDirectory()
{
$this->defaultViewDirectory = $_SERVER["DOCUMENT_ROOT"] . "views/";
}
public function getDefaultViewDirectory()
{
if (is_null($this->defaultViewDirectory)) {
$this->initDefaultViewDirectory();
}
return $this->defaultViewDirectory;
}
}
或者如果您需要静态访问:
class StaticView
{
private static $defaultViewDirectory;
private static function initDefaultViewDirectory()
{
self::$defaultViewDirectory = $_SERVER["DOCUMENT_ROOT"] . "views/";
}
public static function getDefaultViewDirectory()
{
if (is_null(self::$defaultViewDirectory)) {
self::initDefaultViewDirectory();
}
return self::$defaultViewDirectory;
}
}
所以你可以致电StaticView::getDefaultViewDirectory()