У меня проблема с доступом к классам.Доступ к различным классам включает:
index.php
include('includes/header.php');
include('includes/step1.php');
include('includes/footer.php');
header.php
session_start();
include('php/classes/Errorhandler.php');
include('php/classes/User.php');
$errorhandler = new Errorhandler();
$user = new User();
// Test
print_r($errorhandler->errors);
...html
Errorhandler.php
class Errorhandler {
public $errors = array();
...
}
User.php
class User {
public function __construct() {
if($this->grab_computerid()) {
if(!$this->grab_mandant()) {
$errorhandler->errors[] = "102: There was an error.";
}
if(!$this->grab_os()) {
$errorhandler->errors[] = "103: There was an error.";
}
} else {
$errorhandler->errors[] = "101: There was an error.";
}
}
private function grab_computerid() {
$sqlconnection = new SqlConnection();
$conn = $sqlconnection->db_connect();
if ($conn) {
$query = "SELECT Computer_Idn FROM " . DB_PC_TABLE . " WHERE DeviceName = ?";
$params = array($this->get_hostname());
if ($sqlconnection->query($query, $params)) {
$computer_id = $sqlconnection->fetchRow();
$this->set_computer_id($computer_id['Computer_Idn']);
return true;
echo "Test";
} else {
$errorhandler->errors[] = "Statement error occurred.";
}
} else {
$errorhandler->errors[] = "Can't connect to database.";
// test
print_r($errorhandler->errors);
}
$sqlconnection->db_disconnect();
}
}
Index.php содержит соответствующие разделы для сборки сайта. В header.php я создаю два объекта (1. errorhandler, 2. user). Класс User проверяет возврат (boolean) из sqlconnection. Я знаю, что я использую неправильный пароль и получаю ложное. Таким образом, if ($ conn) корректно печатает print_r ($ errorhandler-> errors). Но когда я хочу показать ошибки в step1.php, ошибки массива пустые.
step1.php
// show negative messages
if ($errorhandler->errors) {
foreach ($errorhandler->errors as $error) {
echo '<div class="alert alert-danger message"><strong>Error: </strong>' . $error . '</div>';
}
}
Я тестировал его в header.php также и массив ошибок пуст тоже. Итак, массив ошибок заполняется только классом User.php, но я хочу отображать erros в step1.php. Есть ли проблемы с включениями?
Edit: Надежда, чтобы сделать его более ясным:
header.php
// load the class Errorhandler
require_once('php/classes/Errorhandler.php');
// load the class User
require_once('php/classes/User.php');
// create errorhandler object
$errorhandler = new Errorhandler();
// create user object
$user = new User();
print_r($errorhandler->errors);
Я установил ошибку в классе пользователя:
$errorhandler->errors[] = "Can't connect to database.";
Массив $ errorhandler- > ошибки отсутствуют в header.php.
Я не понимаю, почему массив ошибок пуст. Массив является общедоступным, и я создал объект класса. После того, как я включу step1.php, и ошибка (которая была заполнена User.php в тестовой печати) пуста. – mnlfischer
Возможно, это хороший способ создать геттер и сеттер для массива ошибок в классе Errorhandler? – mnlfischer
Попробуйте сделать $ errorhandler глобальной переменной. – MrNomNom