0

我有一个负责处理所有配置的类 - 从文件中读取配置,并获取在 index.php 中设置的基本配置变量(+ 从那里设置它们)。

因此,我决定在这里使用多态性——我将 Config 类抽象化,并用 FILE 和 VARIABLE 类对其进行了扩展。

如果具有这两个职责的基类长 100 行,这是一种好的实践行为吗?

不要在这里对我投反对票——我只是不想在项目已经完成时发现它不是一个灵活的解决方案。

这是代码(虽然没有重构、测试和添加几个函数,但概念应该很清楚)。

class Config {

    private $file;

    public static $configs = array();

    /**
     * Initializes basic website configurations such as base URL, or the name
     * of the index file.
     *
     * These values can be accessed through this class
    */
    public static function init($configs = array())
    {
        foreach($configs as $key => $value)
        {
            self::$configs[$key] = $value;
        }
    }

    /**
     * Returns the configuration variable which is set in the index file
     *
     * @param string $attribute
     * @return multitype:
     */
    public function __get($attribute)
    {
        return ($this->configs[$attribute]) ? $this->configs[$attribute] : -1;
    }

    /**
     * Setting path to the config file.
     * 
     * @param string $module
     */
    private function __construct($module)
    {
        // Path to the config file
        $path = APATH . 'config' . DIRECTORY_SEPARATOR . $module . '.php';

        // Set the config file to the attribute here
        $this->file = include $path;
    }

    /**
     * Return the object.
     *
     */
    public static function factory($module)
    {
        return new Config($module);
    }

    /**
     * Loads configurations from the given file.
     *
     */
    public function load($property)
    {
        // Return requested value
        return $array[$property];
    }

}
4

1 回答 1

1

你正在做的事情没有,但这让我想知道你为什么要这样做。

如果您尝试以特定方式强制处理配置变量,那么可能会在静态类中加载它们一次。如果您正在尝试练习抽象,那么它是 100 行还是 1K 或任何长度都无关紧要。

这确实让我想知道为什么您将配置变量分散在许多不同的文件中,这样就需要像这样封装加载过程。通常配置信息在启动时加载一次并保留。如果您的应用程序启动后某处的某个文件/类没有加载配置或只是忽略您的实现,会发生什么?

如果不出意外,您可能希望将“init”设为私有并从构造函数中调用它。否则可以调用“工厂”但忽略此步骤并假设不存在配置信息。另外 - 如果 'configs' 是静态的,那么 '$this->configs' 似乎有点粗略。

于 2012-11-18T12:49:31.000 回答