好吧,所以我试图简单地检查构造数组中是否有东西,但似乎根本不起作用...
$DB_VALID = array("mysql");
class DB {
function __construct($conn) {
if(in_array($conn,$DB_VALID)) {
echo "exists!";
}
else {
echo "doesnt exist";
}
}
}
现在,由于构造体在类内部,如果我将其转储,我将得到说为NULL的结果,但是如果将其转储到构造体之外,我将简单地得到真实的结果...
用法
$conn = new DB("mysql");
结果?in_array返回false
该变量$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-标准)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句