1

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

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

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

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

所以访问这些变量的唯一点是“主类”方法。


现在,这些私有变量之一是$_base_url.

但是,我希望用户能够从更好的地方访问 base_url,例如 URL 类(在 helper 目录内)。


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

class Url {

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

}

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

我会有很多重复的代码。

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

我该如何处理?

4

2 回答 2

0

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

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

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

Variables::$_base_url;

要扩展您的评论:

With inheritance you can have a situation where 2 classes have different values for the same $variable. In this example all instances will hold a different value for $_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';
   }
}

Again, it depends on what you are trying to accomplish. If you want your variables act more like Settings or if you just want to have those variables within your instance.

于 2013-03-29T20:53:04.263 回答
0

Why you need a variable to be called from the classname, if the classes extends your MainClass then use parent::get_base_url();

于 2013-03-29T20:56:01.970 回答