【发布时间】:2020-02-28 04:41:30
【问题描述】:
我正在尝试通过构造函数将一个对象传递给另一个对象。我有一个收集数据库凭据并将它们分配给类属性的类。然后是另一个执行实际查询并返回行数组的类。代码如下:
// GetCredentials
class GetCredentials
{
public function __construct()
{
}
private $_db = "";
private $_uname = "";
private $_pwd = "";
public function DB($value = NULL)
{
if( $value===NULL )
return $this->_db;
else
$this->_db = $value;
}
public function Uname($value = NULL)
{
if( $value===NULL )
return $this->_uname;
else
$this->_uname = $value;
}
public function Pwd($value = NULL)
{
if( $value===NULL )
return $this->_pwd;
else
$this->_pwd = $value;
}
public function readCreds($filename)
{
$parray = array();
$file = fopen($filename,"r");
while(! feof($file))
{
array_push($parray,fgets($file));
}
fclose($file);
$this->DB = $parray[0];
$this->Uname = $parray[1];
$this->Pwd = $parray[2];
}
}
// DBconnection
class DBconnection{
public function __construct(GetCredentials $cr)
{
$Uname = $cr->Uname;
$DB = $cr->DB;
$Pwd = $cr->Pwd;
}
private $conn;
private $Uname;
private $DB;
private $Pwd;
public function dbConnect($sql)
{
try {
$conn = new PDO("mysql:host=localhost;dbname=" . $DB, $Uname, $Pwd);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$arr = $conn->prepare($sql);
$arr->execute();
$result = array();
$result = $arr->fetchAll();
return $result;
}
catch(PDOException $err) {
return "ERROR: Unable to connect: " . $err->getMessage();
}
}
function __destruct(){
$conn = null;
}
}
为了测试,我实例化了 GetCredentials 类,填充了值,然后传递给 DBConnection 对象值和所有值,并让它执行实际的数据检索。 我的测试脚本如下所示:
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', true);
ini_set('auto_detect_line_endings', true);
$sC = New GetCredentials();
$sC->readCreds('dbdata.txt');
$db = New DBConnection($sC);
$sql = 'SELECT `Member ID`, `Address 1`, City, State, Zip FROM `MemberDataAll` WHERE LENGTH(Zip) >= 5';
$rArr = $db->dbConnect($sql);
echo count($rArr);
我的脚本引发了一组错误,指出DBConnection object 的属性为空。我在想可能是我的利用率不正确,但我不确定。我还想知道在构造函数中使用 $this 是否是最好的主意,Self:: 更好吗?如果是,为什么?谁能让我直截了当?提前致谢。
【问题讨论】:
标签: php class database-connection