Не могу понять, почему getInstance не определена

Я пытаюсь создать одноэлементный класс 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');
}
}
?>

На данный момент .. эти два файла находятся в одном каталоге

1

Решение

Вам нужно сослаться на статическую переменную с помощью 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 $
4

Другие решения

Других решений пока нет …