我正在尝试熟悉 PHP,并遇到了我现在要描述的问题。
基本上,我有一个具有以下结构的父类:
abstract class DBConn {
protected $con;
abstract function __construct($host, $user, $pass);
abstract function GetConnectionString($host, $user, $pass);
}
另外,我有一个带有以下代码的子类:
class MongoDBConn extends DBConn {
private $col;
private function __construct($host, $user, $pass) {
try {
$server = Self::GetConnectionString($host, $user, $pass);
$this->con = (new MongoClient($server))->selectDB('sicom');
} catch (MongoConnectionException $ex) {
$em = 'Connection error';
throw new Exception($em, ERR_DB_CONN, $ex);
}
}
public function GetConnectionString($host, $user, $pass) {
return "mongodb://" . $user . ":" . $pass . "@" . $host;
}
}
这似乎不起作用。我使用以下 PHP 测试代码:
// Contains class MongoDBConn
require $_SERVER['DOCUMENT_ROOT'] . "/knl/db/dbconn-mongo.php";
// Contains SICOM_* values
require $_SERVER['DOCUMENT_ROOT'] . "/knl/config.db.php";
$dx = new MongoDBConn(SICOM_DB_HOST,SICOM_DB_USER,SICOM_DB_PASSWORD);
var_dump($dx);
而且我没有收到转储,可能是因为 $dx 为 NULL。
我没有足够的 PHP 经验来知道是什么导致了这个问题,我也没有足够的 nginx(我正在使用的 Web 服务器)知道在哪里寻找。有人可以帮我找到解决方案吗?
谢谢!
编辑:我根据建议修改了代码,但实现了以下几点:虽然我的测试文件使用了两个 REQUIRE,但声明 MongoDBConn 类的文件使用了更多。当我尝试使用“REQUIRE ...dbconn-mongo.php”时,主页崩溃。是因为我不能在也使用 REQUIRE 的文件中包含 REQUIRE 吗?如果是这样,有什么解决方法?(所需文件之一包含返回代码;另一个包含字段名称,依此类推。)