使变量可以访问所有类的最佳方法是什么。
例如,我想要一个配置文件(Call it config.php),它将具有如下变量:
$server_url = "www.myaddress.com";
我有一个主库类型文件,其中包含一堆需要访问$ server_url的类。所以这里开始主库文件:
require 'config.php';
class one {
function a() {
$html = "<a href='$server_url/main.php'>LINK</a>"
return $html;
}
function b() {
$html = "<a href='$server_url/about.php'>LINK</a>"
return $html;
}
}
class two {
function new() {
$html = "<a href='$server_url/blah.php'>LINK</a>
}
}
使用config.php为每个函数提供$ server_url的最佳方法是什么?或至少可用于班级中的所有功能?
答案 0 :(得分:3)
我个人会使用静态实体来保存所有配置值。
通常,大多数php应用程序都有一个入口点(index.php),它可以加载config.php文件,并从那时起使静态实体可用。
如果您的应用程序有多个入口点,那么您需要在每个点中包含config.php。
这样的事情:
<?php
class Configurator{
private static $_configuration = array();
public static function write($key, $value) {
self::$_configuration[$key] = $value;
}
public static function read($key) {
return self::$_configuration[$key];
}
}
Configurator::write('server', 'http://localhost');
Configurator::read('server');
?>
CakePHP有一个类似的类:http://api.cakephp.org/view_source/configure/
答案 1 :(得分:1)
将配置放入一个类中,并在serverUrl()
或get('server_url')
的行中使用静态方法。然后像对类的任何其他静态方法一样调用它们(我将在本例中选择后者):
$html = "<a href='" . Config::get ('server_url') . "/main.php'>LINK</a>";
配置类可能很小,使用类似的构造函数:
public function __construct (array $config)
{
foreach ($config as $key => $value)
{
$this->$key = $value;
}
}
并按以下方式添加get()
方法:
public function get ($key)
{
return $this->$key;
}
通过这种方式,您可以从一个数组中读取配置,您可以将其作为单独的实际配置文件,并为多个项目重用相同的代码。
您还可以从项目的任何位置访问变量,并且您将获得一种伪命名空间(如果项目需要在较旧版本的PHP上运行)。
请不要逐字复制代码,它是作为一个例子写的。
答案 2 :(得分:1)
我是单身人士的忠实粉丝,可以全局访问对象,数组或其他数据类型。
<?php
class st {
static $_this;
function __construct(){
self::$_this = $this;
}
static function &getInstance(){
return self::$_this
}
static function set($key, $value){
self::$_this[$key] = $value;
}
static function &get($key){
return self::$_this[$key];
}
}
// Usage
new st();
st::set('foo', 'bar');
// In some class
st::get('foo'); //return 'bar'
// Or when there are some classes/objects
st::getInstance()->foo->bar();
$st =& st::getInstance();
$st->foo->bar();
?>
大致写下了一个小单例,但不知道是否存在语法错误。
使用getInstance处理时,确定您通过引用=&
答案 3 :(得分:0)
在config.php中定义一个常量,如:
define('SERVER_URL','...');
在你班上:
echo SERVER_URL;
答案 4 :(得分:0)
最适合我的是使用像 config.ini 这样的配置文件 然后使用 $my_config = parse_ini_file(file path/config.ini');
现在在我的代码中的任何地方,包括内部函数和类,我都会使用 PHP superglobal 像这样: $GLOBALS["my_config"]['my_global_var']