2013-03-29 46 views
1

我会尽我所能地解释我的情况。设计,重复代码 - 需要一些建议

我正在构建一个框架。它的系统包含以下目录:
1)核心 - 路径,主类(自动加载,CONFIGS,常量),请求
2)助手
3)库

在index.php文件,我将所有最重要的配置变量,如基础url或索引文件。我把它们放在“主类”里面。

这些属性是私有的,因为我不希望任何人在请求流中更改它们。

因此,访问这些变量的唯一要点是来自“主类”方法。


现在,其中一个私有变量是$_base_url

我希望用户能够从一些更好的地方访问base_url,但是像URL类(在帮助程序目录内)。


要做到这一点,我要创建两个方法 - “主类”,并get_base_url()URL类的内内get_base_url(),它会做这样的事情:

class Url { 

    public static function get_base_url() { 
     return Main_Class::get_base_url(); 
    } 

} 

我的问题是 - 我有几个这样的变量,我想从不同的类调用。

我会有很多重复的代码。

我看到的唯一解决方案就是直接在不同的类中设置这些变量,但我想让它们集中在主类中。

我该如何处理?

回答

0

您可以创建另一个类称为变量(或任何您喜欢的),然后使用该类的静态变量能够来回调用它们。事情是这样的:

<?php class Variables { 
    static $_base_url = "http://base_url"; 
} ?> 

这样,你可以打电话给你的变量是这样的:

Variables::$_base_url;

为了您的评论扩大:

有了继承,你可以遇到这样的情况对于同一个$变量,2个类有不同的值。在这个例子中,所有实例将为$ _base_url保存一个不同的值;

class ParentClass { 
    protected $_base_url = "SOME VALUE"; 
} 

class SubClassA extends ParentClass { 

    protected __construct() { 
    $this->_base_url = 'VALUE X'; 
    } 
} 

class SubClassB extends ParentClass { 

    protected __construct() { 
    $this->_base_url = 'DIFFERENT VALUE THAN SubClassA'; 
    } 
} 

再次,它取决于你所要完成的任务。如果你希望你的变量更像Settings,或者你只是想在你的实例中使用这些变量。

+0

呃,继承vs变量集中的类......在我的情况下,其中一个比另一个更好,还是我应该抛硬币? :P – user2203484

+0

这实际上取决于你想要做什么。继承将允许您为每个实例拥有不同的值。集中变量类将确保无论访问变量的对象是什么,它都只有一个值。 – Ares

+0

@ user2203484我已经更新了我的答案,以进一步解释这一点。 – Ares

0

为什么你需要一个变量来从类名中调用,如果这些类继承你的MainClass然后使用parent :: get_base_url();

+0

类不会扩展MainClass。这可以解决我的问题,但我看不到助手/库和主类之间的联系,所以没有任何继承。 – user2203484