Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
У вашего определения класса есть некоторые проблемы. Вы используете очень старый стиль конструктора (который был удален из PHP5, в настоящее время конструктор должен называться __construct()
). Кроме того, в вашем конструкторе много чего не должно быть, но это проблема дизайна и выходит за рамки.
Я собираюсь лишь слегка коснуться проблем ООП и попытаться решить основные специфические проблемы, которые возникают у вас при получении этих строк и печати этих значений:
class DoctorService {
private $totalPatientsA = [];
private $totalPatientsB = [];
private $conn;
public function __construct($conn) {
$this->conn = $conn;
}
function fetchPatients {
$doctor_type_query = "SELECT user_type_detail, COUNT(user_type) AS
'datacount' FROM users GROUP BY user_type";
$doctor_type_result = mysqli_query( $this->conn, $doctor_type_query );
while ( $patients = mysqli_fetch_assoc( $doctor_type_result ) ) {
$this->totalPatientsA[] = $patients['user_type_detail'];
$this->totalPatientsB[] = $patients['datacount'];
}
}
public function getTotalPatientsA() {
return $this->totalPatientsA;
}
public function getTotalPatientsB() {
return $this->totalPatientsB;
}
}
С этим, теперь db Соединение объявляется за пределами вашего класса доктора и становится зависимостью для него, объявленным в конструкторе.
Чтобы использовать его, вы должны сделать что-то вроде:
// I'm assuming this defines `$conn`, this is not the cleanest approach but it works for your purposes.
require_once "dbconnection.php";
$doctor_service = new DoctorService($conn);
$doctor_service->fetchPatients();
echo implode(', ', $doctor_service->getTotalPatientsA()), "\n";
echo implode(', ', $doctor_service->getTotalPatientsB()), "\n";
Сначала вам потребуется определение соединения с БД, которое вводит $conn
в область видимости, и добавьте его в свой класс DoctorService
.
Вы вызываете $doctor_service->fetchPatients()
, чтобы фактический запрос был выполнен.
Для извлечения пациентов вы вызываете каждый из получателей, и, поскольку они возвращают массив, вы передаете результат через implode
, поэтому он преобразуется в строку.
totalPatientsA
и totalPatientsB
должны быть определены как массивы. Далее вы можете сделать это:
// add new value to array
$this->totalPatientsA[] = $patients['user_type_detail'];
$this->totalPatientsB[] = $patients['datacount'];