Я пытаюсь передать объект другому через конструктор. У меня есть класс, который собирает учетные данные базы данных и присваивает их свойствам класса. Затем другой класс, который выполняет фактический запрос и возвращает массив строк. Вот код:
// 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::
, и если да, то почему? Кто-нибудь может привести меня в порядок? Заранее спасибо.