我有档案init.php
:
<?php
require_once 'config.php';
init::load();
?>
config.php
:
<?php
$config = array('db'=>'abc','host'=>'xxx.xxx.xxx.xxxx',);
?>
名为something.php
的小组:
<?php
class something{
public function __contruct(){}
public function doIt(){
global $config;
var_dump($config); // NULL
}
}
?>
有人可以告诉我为什么它是空的??? 在php.net,他们告诉我,我可以访问,但实际上不是。 我试过但不知道。 我使用的是PHP 5.5.9。 提前谢谢。
答案 0 :(得分:4)
$config
中的变量config.php
不是全局的。
要使它成为一个全局变量,我建议你不要在它前面写出神奇的单词global
。
我建议你阅读superglobal variables。
还有一点variable scopes。
我建议做一个能够解决这个问题的课程。
应该看起来像
class Config
{
static $config = array ('something' => 1);
static function get($name, $default = null)
{
if (isset (self::$config[$name])) {
return self::$config[$name];
} else {
return $default;
}
}
}
Config::get('something'); // returns 1;
答案 1 :(得分:2)
像这样使用Singleton Pattern
<?php
class Configs {
protected static $_instance;
private $configs =[];
private function __construct() {
}
public static function getInstance() {
if (self::$_instance === null) {
self::$_instance = new self;
}
return self::$_instance;
}
private function __clone() {
}
private function __wakeup() {
}
public function setConfigs($configs){
$this->configs = $configs;
}
public function getConfigs(){
return $this->configs;
}
}
Configs::getInstance()->setConfigs(['db'=>'abc','host'=>'xxx.xxx.xxx.xxxx']);
class Something{
public function __contruct(){}
public function doIt(){
return Configs::getInstance()->getConfigs();
}
}
var_dump((new Something)->doIt());
答案 2 :(得分:1)
包括如下文件:
include("config.php");
class something{ ..
并将数组打印为var_dump($config);
,无需全局。
答案 3 :(得分:1)
稍微改变你的类以在构造函数上传递一个变量。
<?php
class something{
private $config;
public function __contruct($config){
$this->config = $config;
}
public function doIt(){
var_dump($this->config); // NULL
}
}
?>
然后,如果你
config.php
yourClassFile.php
并且做,
<?php
$my_class = new something($config);
$my_class->doIt();
?>
它应该有用。
注意:永远不要使用Globals
(在我们可以避免它们的地方)