多态性 - 确保一切正确

时间:2012-11-18 09:57:56

标签: php oop

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

因此,我决定在这里使用多态 - 我创建了Config类abstract并使用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];
    }

}

1 个答案:

答案 0 :(得分:1)

你所做的事情没有错误,但它让我想知道为什么你想这样做。

如果您尝试以特定方式强制执行配置变量的处理,那么可以在静态类中加载它们一次。如果你正在尝试抽象,那么它是100线还是1K或任何长的并不重要。

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

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