1

由于$directories. 请帮忙:

<?php
 .....
 class Config {

   public static $directories = array(
      "resources" => realpath(__DIR__),
       "root" => $_SERVER['DOCUMENT_ROOT'],
       "branch" => $_SERVER['DOCUMENT_ROOT'] . "/branch",
       "templates" => realpath(__DIR__ . '/templates'),
       "library" => realpath(__DIR__ . '/library'),
       "views" => realpath(__DIR__ . '/views'),
       "controllers" => realpath(__DIR__ . '/controllers'),
       "backups" => realpath(__DIR__ . '/backups')
    );

  }
?>
4

4 回答 4

4

您不能将静态成员初始化为直接文字和已定义的常量以外的任何内容。你可以使用这样的东西:

<?php
class Config 
{
    static protected $directories = null;

    static public function getDirectory($dirName)
    {
        if (self::$directories == null)
        {
            self::$directories = array(
                "resources" => realpath(__DIR__),
                "root" => $_SERVER['DOCUMENT_ROOT'],
                "branch" => $_SERVER['DOCUMENT_ROOT'] . "/branch",
                "templates" => realpath(__DIR__ . '/templates'),
                "library" => realpath(__DIR__ . '/library'),
                "views" => realpath(__DIR__ . '/views'),
                "controllers" => realpath(__DIR__ . '/controllers'),
                "backups" => realpath(__DIR__ . '/backups')
            );
        }
        return self::$directories[$dirName];
    }
}
#EOF
于 2010-07-17T22:23:29.410 回答
0

声明类/对象变量/常量时不能调用函数。您也不能使用字符串连接。它相当有限。

更新:您可以使用以下解决方法(编写需要一点时间),它有点难看,因为它需要定义两次常量:

<?php

define('CONFIG_DIRECTORY_RESOURCES', realpath(__DIR__));
define('CONFIG_DIRECTORY_ROOT', $_SERVER['DOCUMENT_ROOT']);
define('CONFIG_DIRECTORY_BRANCH', $_SERVER['DOCUMENT_ROOT'] . '/branch');
define('CONFIG_DIRECTORY_TEMPLATES', CONFIG_DIRECTORY_RESOURCES . '/templates');
define('CONFIG_DIRECTORY_LIBRARY', CONFIG_DIRECTORY_RESOURCES . '/library');
define('CONFIG_DIRECTORY_VIEWS', CONFIG_DIRECTORY_RESOURCES . '/views');
define('CONFIG_DIRECTORY_CONTROLLERS', CONFIG_DIRECTORY_RESOURCES . '/controllers');
define('CONFIG_DIRECTORY_BACKUPS', CONFIG_DIRECTORY_RESOURCES . '/backups');

 class Config
 {
   public static $directories = array(
      "resources" => CONFIG_DIRECTORY_RESOURCES,
       "root" => CONFIG_DIRECTORY_ROOT,
       "branch" => CONFIG_DIRECTORY_BRANCH,
       "templates" => CONFIG_DIRECTORY_TEMPLATES,
       "library" => CONFIG_DIRECTORY_LIBRARY,
       "views" => CONFIG_DIRECTORY_VIEWS,
       "controllers" => CONFIG_DIRECTORY_CONTROLLERS,
       "backups" => CONFIG_DIRECTORY_BACKUPS,
    );
  }
于 2010-07-17T22:18:48.237 回答
0

引用 PHP 手册:

这个 [property] 声明可能包括一个初始化,但这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息才能被评估。

您可以定义一个空数组,然后调用一个方法在运行时填充它,或者在构造函数中初始化数组值的单例类

于 2010-07-17T22:23:28.167 回答
0

为什么要引入对象的开销?注册表有它们的位置,但它们是常量的主要候选者,那么为什么不直接定义它们呢?

于 2010-07-17T22:27:50.850 回答