好吧所以我试图简单地检查数组中是否有来自构造的东西,但它似乎根本不起作用......
$DB_VALID = array("mysql");
class DB {
function __construct($conn) {
if(in_array($conn,$DB_VALID)) {
echo "exists!";
}
else {
echo "doesnt exist";
}
}
}
现在,由于construct是在一个类中,如果我转储它,我会得到结果为NULL,但如果我将它转储到构造之外,我将简单地得到真正的结果......
用法
$conn = new DB("mysql");
结果? in_array返回false
答案 0 :(得分:2)
$DB_VALID
函数范围内不存在变量__construction
。
推荐的解决方案是将$DB_VALID
移动到DB
类中的静态变量,如下所示:
class DB {
static $DB_VALID = array("mysql");
function __construct($conn) {
if(in_array($conn,self::$DB_VALID)) {
echo "exists!";
}
else {
echo "doesnt exist";
}
}
}
您可以稍后通过将其引用为DB::$DB_VALID
来访问代码其他部分中的数组。
但是,如果您必须保留全局变量并从__construct
中访问它,则可以使用global
关键字将其带入本地范围,如下所示:
$DB_VALID = array("mysql");
class DB {
function __construct($conn) {
global $DB_VALID; // Brings the global variable to local scope
if(in_array($conn,$DB_VALID)) {
echo "exists!";
}
else {
echo "doesnt exist";
}
}
}
请考虑未来的第一个解决方案,因为使用全局变量是一种简单的方法,可以让您的应用程序随着它们的发展而中断。
编辑:正如您在评论中提到的,您的限制是您现在正在加载脚本的顺序,您还应该真正研究类自动加载和名称空间,因为您的项目将变得越来越复杂并且更难以管理(参见sitepoint.com/autoloading-and-the-psr-0-standard)。
答案 1 :(得分:0)
如果 ,请使用global
关键字。
$DB_VALID = array("mysql");
class DB {
function __construct($conn) {
global $DB_VALID; // Makes the variable available in the scope
if(in_array($conn,$DB_VALID)) {
echo "exists!";
}
else {
echo "doesnt exist";
}
}
}
$conn = new DB("mysql"); // will print "exists!"
请注意,全局变量通常会提示organisation problems,因此您应该检查一下您的结构,看看是否真的有必要在这里使用global
。