每个人都拥有它,一个需要在整个项目中访问的数组或对象。这可以是设置,用户数据数组或其他任何不符合定义变量的条件(导致定义的数组都不好)。
我可能不是在寻找合适类型的东西,但我需要一种方法来访问每个类,函数或页面中的对象。
因此,例如,让我说我有一个标准的配置文件:
<?php
return array(
'database' => array(
'driver' => 'mysql',
'mysql' => array(
'host' => 'localhost',
...
),
'mongodb' => array(
'host' => 'localhost',
...
),
...
),
);
?>
我这样做:
$config = (require('path/file.php'));
所以,现在我有了我的配置。但这不会传递。我不想调用“$ config =(require('path / file.php'));”每次我需要一个设置。
所以有没有办法总是只调用一次,例如,将它存储在一个类或其他东西中(而不必一直明确地定义该类,导致这一点失败)。
现在我知道全局变量了。但出于几个原因,我并不是真的偏爱它们。 Mysql不是一个选项,因为它是一个配置文件,用户需要能够在启动之前改变它。
答案 0 :(得分:2)
未经测试
在Config.php中
class Config
{
public static function get()
{
return array(
'database' => array(
'driver' => 'mysql',
'mysql' => array(
'host' => 'localhost',
...
),
'mongodb' => array(
'host' => 'localhost',
...
),
...
),
);
}
}
在index.php中:
function __autoload($classname) {
$filename = "./". $classname .".php";
include_once($filename);
}
在文件中你想要你的conf:
$myConf = Config::get();
您还可以改进课程以轻松获取特定的配置数据
答案 1 :(得分:0)
<?php
class config {
public static $driver = "mysql";
public static $host = "localhost";
}
echo config::$driver;
如果您的目标是返回整个数组,请按照niconoes示例。
如果您不想制作对象,可以像上面发布的代码一样进行。它快速而简单。
答案 2 :(得分:0)
所以最后这是我的解决方案,它基于松散的niconoe,或者至少来自他的答案。
的Class1
Class Class1 {
public static $conf = null;
public function __construct($config) {
self::$conf = $config;
}
}
的Class2
Class Class2 extends Class1 {
public function conf() {
return self::$conf;
}
}
索引
// Your custom class dir
define('CLASS_DIR', 'classes/');
// Add your class dir to include path
set_include_path(get_include_path().PATH_SEPARATOR.CLASS_DIR);
// Load all classes
spl_autoload_extensions('.class.php');
// Use default autoload implementation
spl_autoload_register();
// define the config (for now a string, but array is possible too
$cClass2 = new Class2('config');
// echo the variable in Class1 by requesting a Class2 function
echo Class2::conf();
Outputs "config"
这样可以在类之间传递变量并立即加载所有变量。
我很想听到一些评论,看到我还在学习并欣赏你的所有观点。