在我的config.php文件中,我有一个设置为'localhost'的变量。
$CONFIG['MySQLi']['host'] = "localhost";
但是,当我在我的数据库类中包含这个config.php时,我通过__construct()方法调用echo中的变量来测试它
public function __construct() {
echo $CONFIG['MySQLi']['host'];
}
但由于某种原因,我收到了这个错误:
Notice: Undefined variable: CONFIG in C:\xampp\htdocs\Muse\classes\class.database.php on line 15
但是我没有输入config.php文件的错误。有人能够解释为什么会这样吗?三江源
答案 0 :(得分:4)
该函数不知道由于variable scope而在外部定义的变量。
public function __construct() {
global $CONFIG;
}
应该解决这个问题。但是,这通常被认为是不好的做法。
或者,您可以使用Kohjah Breese所示的静态属性,将配置数组传递给构造函数(如 AlexP 所示)或使用如下所示的构造。
/config/mysqli.php
<?php
return array(
//what now is $CONFIG['MySQLi']
);
并在函数中
public function __construct() {
$config = include '/config/mysqli.php';
}
答案 1 :(得分:1)
对于仍然想要回答这个问题的人来说,另一个好方法是通过定义一个变量。
define('VARIABLE', 'VALUE');
然后通过VARIABLE调用它。 E.g。
<?php echo VARIABLE; ?>
答案 2 :(得分:0)
如上所述,函数无法访问存储在它们之外的标准变量,但更好的解决方案是创建一个要存储全局变量的类。我使用类似这样的东西:
class Conf
{
// Project
static $CODE = 'F';
static $NAME = 'For';
static $ACCESS = 'public';
static $CHARSET = 'utf-8';
static $DATA = array();
static $CACHE = false;
static $HTMLINDENT = true;
// Diagnostic
static $SHOWEXECTIME = true;
// Paths
static $PATH_FILESYSTEM = '';
static $PATH_CORE = '/var/www/sites/core';
static $PATH_DOMAIN = 'localhost';
static $PATH_URL = 'http://localhost/sites/for/';
static $PATH_CACHE = 'cache/';
static $PATH_CSS = 'css/';
static $PATH_DATA = 'data/';
static $PATH_JS = 'js/';
static $PATH_LOG = 'logs/';
static $PATH_XML = 'xml/';
static $PATH_XSL = 'xsl/';
// DB Details
static $DB_USER = 'root';
static $DB_PASS = 'pass';
static $DB_DSN = 'mysql:host=localhost;dbname=for;charset=utf8';
}
我的测试显示这是最快的解决方案。有些人使用非常慢的常量。全球已被折旧,存在安全风险。
您可以使用Conf :: $ NAME从PHP中的任何位置访问任何这些变量;等