Я пытаюсь создать одноэлементный класс DAO для проекта, и я не могу понять, почему метод getInstance возвращается неопределенным.
Я получаю эту ошибку:
«project / read.php: 37: Неустранимая ошибка: вызов неопределенного метода MiteDAO :: getInstance»
Кроме того, я запускаю это на Tomcat8 с Quercus, где я могу найти журнал, в котором напечатана трассировка стека? Я думаю, что я проверил все сегодня в каталоге журналов, и я не вижу этого.
(это мой первый раз)
Этот скрипт вызывается из внешнего интерфейса при отправке
<?php
ob_start();
ini_set('display_errors', 'On');
include 'MiteDAO.php';
include 'Contributer.php';
//FORM VALUES
$_cname = $_POST['cname'];
$_sname = $_POST['sname'];
$_sdate = $_POST['sdate'];
$_edate = $_POST['edate'];
$db_read_query = "select *
from contributes
where cname = '{$_cname}' and
sname = '{$_sname}' and
cdate > '{$_sdate}' and
cdate < '{$_edate}';";
echo "<p> From $_sdate to $_edate, $_cname made the following contributions to Senator $_sname </p>";
$db_dao = MiteDAO::getInstance();
$results = $db_dao->query($db_read_query);
$Contributers[];
while ($row = pg_fetch_row($result)) {
$temp_contrib = new Contributer();
$temp_contrib->sname = $row[0];
$temp_contrib->cname = $row[1];
$temp_contrib->cdate = $row[2];
$temp_contrib->amt = $row[3];
array_push (Contributers, $temp_contrib);
}
echo array_values(Contributers); //TODO
?>
Это класс MiteDAO, в котором определен getInstance
<?php
class MiteDAO {
private static $instance;
private $conn;
public static function getInstance() {
if ($instance === null) {
self::$instance = new MiteDAO();
}
return self::$instance;
}
public function connect() {
$conn = pg_connect ("host=localhost
port=5432
dbname=postgres
user=shepard
password=p4ssw0rd
connect_timeout=5")
or die ("connection failed");
}
public function close() {
pg_close ($conn);
}
public static function query($query) {
return pg_query ($conn, $query) or die ('Query failed');
}
}
?>
На данный момент .. эти два файла находятся в одном каталоге
Вам нужно сослаться на статическую переменную с помощью self::
if (is_null(self::$instance)) {
self::$instance = new MiteDAO();
}
return self::$instance;
http://php.net/manual/en/language.oop5.static.php
РЕДАКТИРОВАТЬ
У вас есть ошибки в вашем основном скрипте:
Неустранимая ошибка: невозможно использовать [] для чтения в /project/read.php в строке 26
Если вы пытаетесь создать массив, вам нужно сделать:
$contributors = array(); // use lower case for variable names, too
Это также неверно:
array_push (Contributers, $temp_contrib); // Reference your variable with a $
Других решений пока нет …