设计,重复代码 - 需要一些建议

时间:2013-03-29 20:47:46

标签: php architecture

我会尽可能清楚地解释我的情况。

我正在构建一个框架。其系统包含以下目录:
1)核心 - 路由,主类(自动加载,配置,常量),请求
2)助手
3)图书馆

在index.php中,我设置了所有最重要的配置变量,例如基本URL或索引文件。我将它们设置在“主类”中。

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

因此,访问这些变量的唯一方法是使用“主类”方法。


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

我希望用户能够从更好的位置访问base_url,例如URL类(在帮助程序目录中)。


为了实现这一点,我必须在“main class”中创建两个方法 - get_base_url(),并在url类中创建get_base_url(),它将执行以下操作:

class Url {

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

}

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

我会有很多重复的代码。

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

我该如何处理?

2 个答案:

答案 0 :(得分:0)

您可以创建另一个名为变量的类(或者您喜欢的任何类),然后使用带有该clase的静态变量来反复调用它们。像这样:

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

这样你可以像这样调用你的变量:

Variables::$_base_url;

扩展您的评论:

对于继承,您可能会遇到两个类对同一$变量具有不同值的情况。在此示例中,所有实例将为$ _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';
   }
}

同样,这取决于你想要完成的任务。如果您希望变量更像“设置”,或者您只想在实例中包含这些变量。

答案 1 :(得分:0)

为什么你需要从类名调用变量,如果类扩展你的MainClass然后使用parent :: get_base_url();