我会尽可能清楚地解释我的情况。
我正在构建一个框架。其系统包含以下目录:
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();
}
}
我的问题是 - 我有几个这样的变量,我想从不同的类中调用。
我会有很多重复的代码。
我看到的唯一解决方案是直接在不同的类中设置这些变量,但我希望将它们集中在主类中。
我该如何处理?
答案 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();